Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL SELECT n GROUP BY पर आधार रिकॉर्ड करता है

नमूना डेटा

create table data (Country varchar(10), Number int);
insert into data select
'USA' , 300 union all select
'USA' , 450 union all select
'USA' , 500 union all select
'USA' , 100 union all select
'FR'  , 100 union all select
'FR'  , 420 union all select
'UK'  , 300 union all select
'UK'  , 400 union all select
'UK'  , 1000;

पहला विकल्प एक छद्म रैंक है जिसमें चर का उपयोग किया जाता है जैसे कि द स्क्रम मिस्टर ने दिखाया है, लेकिन यहां एक ही कथन के रूप में प्रस्तुत किया गया है

SELECT Country, Number
FROM (
    SELECT
        Number,
        @r := case when @c=country then @r+1 else 1 end rownum,
        @c := Country Country 
    FROM (select @r :=0 , @c := '') x, data
    ORDER BY Country, Number DESC
) y
WHERE rownum < 3;

यदि आप इसे फ्रंट एंड में उपयोग कर रहे हैं, और केवल 2 काउंट की आवश्यकता है, तो आप इस फॉर्म का उपयोग कर सकते हैं जो एक सूची (सिंगल कॉलम) में काउंट्स लौटाता है

SELECT
    Country,
    left(x,locate(',',concat(x,','),locate(',',x)+1)-1) Numbers
FROM (
    SELECT
        a.Country,
        Group_Concat(a.Number) x
    From (
        select country, number
        from data
        order by country, number desc) a
    group by a.Country
) b

परिणाम है

"Country";"Numbers"
"FR";"420,100"
"UK";"1000,400"
"USA";"500,450"

यदि संबंधों का होना संभव है, तो दूसरे रूप की यह भिन्नता संबंधों को हटा देती है और रिकॉर्ड के रूप में "प्रति देश शीर्ष 2 अलग-अलग संख्याएं" दिखाती है।

SELECT distinct x.Country, x.Number
From data x
inner join
(
    SELECT
        Country,
        left(x,locate(',',concat(x,','),locate(',',x)+1)-1) Numbers
    FROM (
        SELECT
            a.Country,
            Group_Concat(a.Number) x
        From (
            select distinct country, number
            from data
            order by country, number desc) a
        group by a.Country
    ) b
) y on x.Country=y.Country
    and concat(',',y.Numbers,',') like concat('%,',x.Number,',%')
order by x.Country, x.Number Desc

परिणाम

"Country";"Number"
"FR";"420"
"FR";"100"
"UK";"1000"
"UK";"400"
"USA";"500"
"USA";"450"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL दिनांक अंतर

  2. MySQL सर्वर का समय क्षेत्र कैसे बदलें?

  3. #1273 - अज्ञात संयोजन:'utf8mb4_unicode_520_ci'

  4. स्प्रिंग डेटा जेपीए केवल एक समग्र कुंजी ऑटो वृद्धि हुई समस्या है

  5. MySQL में कैरेक्टर सेट और कॉलेशन को समझना