繁体   English   中英

SQL Server 2005查询帮助(分组依据)

[英]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 ,因为除了countrycountry_id主键之外,您不需要任何属性,它们已经在video

一种解决方案是使用WHEREMAX依赖子查询从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM