如何内联需使用COUNT函数的第三列并修正目标SQL查询
修正后的SQL查询方案
嘿,我来帮你调整这个SQL查询,让它能输出你想要的三列结果~首先得指出原查询里的几个问题:
- 你把
COUNT函数放在JOIN里是错误的用法,JOIN是用来关联数据表的,聚合函数不能这么用 COUNT的参数写法不对,它不能直接接收多个条件作为参数,得用条件判断或者分组的方式来实现统计
根据你的需求——获取去重的CatalogNo_No.branch_id、dvd.DVD_name,以及基于COUNT计算的第三列(针对指定的branch_id:MA0001到MA0005),我整理了两种常见场景的写法:
场景1:统计每个branch_id下该DVD的记录数
如果第三列是要统计当前branch_id中《Final Destination》这个DVD的库存/记录数量,可以用窗口函数来实现:
SELECT DISTINCT c.branch_id, d.DVD_name, COUNT(c.DVD_catalogno) OVER (PARTITION BY c.branch_id) AS branch_dvd_count FROM CatalogNo_No c INNER JOIN DVD d ON c.DVD_catalogno = d.DVD_catalogno WHERE d.DVD_name = 'Final Destination' AND c.branch_id IN ('MA0001', 'MA0002', 'MA0003', 'MA0004', 'MA0005')
- 用别名
c和d简化表名,让SQL更易读 DISTINCT确保branch_id不会重复出现- 窗口函数
COUNT(...) OVER (PARTITION BY c.branch_id)会按branch_id分组统计记录数,不需要额外的GROUP BY
场景2:统计指定5个branch_id中该DVD的总记录数
如果第三列是要统计这5个branch_id里《Final Destination》的总数量,可以用子查询来实现:
SELECT DISTINCT c.branch_id, d.DVD_name, (SELECT COUNT(*) FROM CatalogNo_No WHERE DVD_catalogno = d.DVD_catalogno AND branch_id IN ('MA0001', 'MA0002', 'MA0003', 'MA0004', 'MA0005')) AS total_branch_count FROM CatalogNo_No c INNER JOIN DVD d ON c.DVD_catalogno = d.DVD_catalogno WHERE d.DVD_name = 'Final Destination' AND c.branch_id IN ('MA0001', 'MA0002', 'MA0003', 'MA0004', 'MA0005')
- 子查询会针对当前DVD的catalogno,统计指定5个branch_id下的总记录数
- 同样用
DISTINCT保证branch_id唯一
内容的提问来源于stack exchange,提问作者game symbol
相关产品推荐
相关产品推荐

