繁体   English   中英

按聚合不在 SELECT 语句中过滤 SQL

[英]Filter SQL by Aggregate Not in SELECT Statement

您能否根据聚合值过滤 SQL 表,但仍显示聚合语句中不存在的列值?

  • 我的表格只有 3 列:“Composer_Tune”、“_Year”和“_Rank”。

  • 我想使用 SQL 来查找每个年度列表中重复的“Composer_Tune”值,以及重复项目的排名。

  • 由于我按“Composer_Tune”和“Year”分组,我无法用我当前的代码列出“_Rank”。

  • 该图显示了我最初的“查找重复项”查询结果与我想要的结果:

当前与期望的结果

  • 我尝试应用这个聚合子查询 StackOverflow 帖子中的概念,但我仍然从这段代码中得到“_Rank 在 select 列表中无效,因为它不包含在聚合 function 或 GROUP BY 子句中”:
  WITH DUPE_DB AS (SELECT * FROM DB.dbo.[NAME] GROUP BY Composer_Tune, _Year HAVING COUNT(*)>1)
  SELECT Composer_Tune, _Year, _Rank    
  FROM DUPE_DB

您需要在 select 列中显式声明 Group By 表达式中使用的列。 如果您使用 transact sql 正确使用 Group By,则可以使用以下文档

只需将聚合结果集连接到原始单元级表:

WITH DUPE_DB AS (
    SELECT Composer_Tune, _Year 
    FROM DB.dbo.[NAME] 
    GROUP BY Composer_Tune, _Year 
    HAVING COUNT(*) > 1
) 

SELECT n.Composer_Tune, n._Year, n._Rank 
FROM DB.dbo.[NAME] n
INNER JOIN DUPE_DB
  ON n.Compuser_Tune = DUPE_DB.Composer_Tune
  AND n._Year = DUPE_DB._Year
ORDER n.Composer_Tune, n._Year

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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