显示具有最大行数的不同列

时间:2015-12-03 02:44:35

标签: mysql sql

我有一个MySQL方案visits(name, vdate, vtime),代表一个房子里所有客人的快照。我想列出最繁忙的日子 - 即访客最多的日子。所以来自

john | 2000-01-01 | 13:00
adam | 2000-01-01 | 13:00
cary | 2000-01-01 | 13:00
joan | 2000-01-01 | 15:00
mary | 2000-01-01 | 15:00
kate | 1950-11-11 | 02:00

理想的输出是

2000-01-01 | 13:00 | 3
1950-11-11 | 02:00 | 1

我可以生成一个也列出2000-01-01 | 15:00 | 2的输出,但我不想要那个;我只想要该日期的最大行数:3。

基本代码是:

SELECT vdate, vtime, COUNT(*) as cnt FROM visits GROUP BY vdate, vtime ORDER BY cnt DESC

我已尝试过SELECT DISTINCT vdate(它根本不会改变结果)。我认为可能需要的是使用MAX函数的第二个查询,但我不确定如何说出来。

1 个答案:

答案 0 :(得分:0)

这是一种使用变量且只使用一个聚合的方法:

select v.*
from (select v.*,
             (@rn := if(@vd = vdate, @rn + 1,
                        if(@vd := vdate, 1, 1)
                       )
             ) as rn
      from (select vdate, vtime, count(*) as cnt
            from visits
            group by vdate, vtime
           ) v cross join
           (select @vd := 0, @rn := 0) params
      order by vdate, cnt desc
     ) v
where rn = 1;