2

我有下表

video_id    ip_address
1           192.168.1.1
1           192.168.1.1
1           192.168.1.2
2           192.168.1.2
2           192.168.1.2
2           192.168.1.2

运行以下查询会返回每个 IP 地址每个视频的唯一请求数量。

SELECT video_id, COUNT(*) as num_unique_requests FROM 
    (SELECT video_id, ip_address FROM videos
    GROUP BY video_id, ip_address) t
GROUP BY video_id
ORDER BY num_unique_requests DESC

video_id    num_unique_requests
1           2
2           1

有什么办法可以将最里面的GROUP BY语句嵌套在另一个GROUP BY语句中,这样我就可以避免创建最外面的语句来GROUP BY video_id?

还有其他方法可以更有效地编写此查询吗?

4

2 回答 2

2

只需使用COUNT(DISTINCT FILEDNAME)

SELECT video_id, COUNT( DISTINCT ip_address) as num_unique_requests FROM 
videos
GROUP BY video_id
ORDER BY num_unique_requests DESC
于 2012-11-30T06:49:02.890 回答
1

在您的情况下,DISTINCT在内部查询中很合适,而不是GROUP BY

SELECT video_id, COUNT(*) as num_unique_requests 
FROM 
    (SELECT DISTINCT video_id, ip_address FROM videos) t
GROUP BY video_id
ORDER BY num_unique_requests DESC
于 2012-11-30T06:48:56.207 回答