SQL:计算时间范围内列值的出现次数和按次数排序

时间:2015-01-22 11:44:07

标签: mysql sql

所以我收到一堆关于"房间"柱。我想要做的是按消息数量找到前5个房间。因此,如果过去5天内的1000条消息来自A室,500条来自B室,依此类推,我将以A,B,C,D,E形式返回结果。

我想出了如何找到所有的房间"过去5天

SELECT room 
FROM messages 
WHERE 
    timestamp < (SELECT UNIX_TIMESTAMP()*1000) 
    AND 
    timestamp > (SELECT UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 5 day))*1000);

但是当我尝试简单地将ORDER BY count(room);添加到最后时,整个列表会变成一个不相关的结果(最近的消息)。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

正如M Khalid Junaid的评论所述:group by room列,然后按以下顺序排列:

SELECT room,count(*)
FROM messages 
WHERE 
    timestamp < (SELECT UNIX_TIMESTAMP()*1000) 
    AND 
    timestamp > (SELECT UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 5 day))*1000)
group by room
order by 2 desc
limit 5;