[英]SQL Server 2005 query help (group by)
我有一些作者拍摄的某个国家的视频。 我需要按国家/地区分组,并显示该国家/地区最长的视频,以及作者的名字。 我知道如何选择最长持续时间的视频,但不知道如何添加作者的名字。
这是我的脚本,该脚本显示了该国家/地区最长的视频。 我所需要的只是添加作者。
SELECT country.country_id, max(video.duration)
FROM VIDEO
JOIN COUNTRY ON country.country_id = video.country_id
JOIN AUTHOR ON author.author_id = video.author_id
GROUP BY country.country_id
我相信没有必要与country
进行JOIN
,因为除了country
和country_id
主键之外,您不需要任何属性,它们已经在video
。
一种解决方案是使用WHERE
和MAX
依赖子查询从video
选择合适的行
SELECT VIDEO.*, AUTHOR.name
FROM VIDEO v1
JOIN AUTHOR ON author.author_id = v1.author_id
WHERE video.duration = (
SELECT max(v2.duration)
FROM VIDEO v2
WHERE v2.country_id = v1.country_id)
如果您要避免依赖子查询,则可以使用GROUP BY
使用以下方法
SELECT VIDEO.*, AUTHOR.name
FROM VIDEO v1
JOIN AUTHOR ON author.author_id = v1.author_id
JOIN (
SELECT v.country_id, max(v.duration) maxduration
FROM VIDEO v
GROUP BY v.country_id
) t ON v1.country_id = t.country_id and t.maxduration = v1.duration
有几种解决方法,但是ROW_NUMBER是较简单的方法之一。
SELECT *
FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY c.country_id ORDER BY v.duration) AS rn,
*
FROM VIDEO AS v
JOIN AUTHOR AS a ON a.author_id = v.author_id
) AS t
WHERE t.rn = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.