我有一个像:
这样的数据集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
答案 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