sql中的distinct,max和group by query

时间:2017-11-15 07:22:46

标签: sql sql-server group-by subquery distinct

我有一个像:

这样的数据集
list1     list2   
a          e
a          e
b          w
a          e
a          r
b          c

我想找到list2中按list1分组的最频繁的项目。

list1     list2    max
  a         e       3
  b         w       1

如何摆脱b,w,1和b,c,1等数量的元素? 我希望随机拥有其中一个。

我试过这样的事情

SELECT clf1 as clf2, first(value_count) as max_value 
FROM (SELECT list1 as clf1, list2, count(list2) AS value_count FROM table GROUP BY list2,clf1 order by value_count desc) 
GROUP BY clf2

5 个答案:

答案 0 :(得分:0)

尝试使用此查询:

Q1:

SELECT list1, count(list2) AS value_count FROM table GROUP BY list1;

这将为您提供所有list1存在;

<强> Q2:

`SELECT list1, max(list2), count(list2) AS value_count FROM table GROUP BY list1,list2`;

只有list1,才会显示所有max(list2)存在。

答案 1 :(得分:0)

Select list1 , List2 , count(List2)  AS value_count
From table Group By list1 , List2

答案 2 :(得分:0)

Select list1 , List2 , count(List2)  AS value_count
From table Group By list1 , List2

答案 3 :(得分:0)

如果您只想查找list1按list1分组的最频繁项目。下面的脚本可以使用。

SELECT  top(1) [list1]
      ,[list2],
      count(*) as max
  FROM [dbo].[tableData]
  group by list1,list2
  order by max desc

答案 4 :(得分:0)

假设您正在使用Mysql,我想您可以尝试这样的查询。

在查询的内部,生成普通计数(*)/ group by,按计数的降序排序结果。

在第二部分中,我做了一个CROSS JOIN来初始化变量并使用变量定义一个CASE来模拟ROW_NUMBER()。

在外部部分过滤结果(每个&#34;组&#34;只有一行)。

SELECT list1, list2, RC
FROM (SELECT A.*
    , CASE WHEN @gr1=list1 THEN @row_n:=@row_n+1 ELSE @row_n:=1 END AS RN 
    , @gr1:=list1    
    FROM (SELECT list1
             , list2
            , COUNT(*) AS RC
          FROM LIST 
          GROUP BY list1, list2
          ORDER BY list1, RC DESC ) A
    CROSS JOIN (SELECT @row_n:=1, @gr1:='') B      
    ) C
WHERE RN=1;

输出:

list1   list2   RC
a       e       3
b       w       1