gpt4 book ai didi

sql - 有效地包括不在SQL查询分组依据中的列

转载 作者:行者123 更新时间:2023-12-01 15:56:29 26 4
gpt4 key购买 nike

给定

表A

Id   INTEGER
Name VARCHAR(50)

表B
Id   INTEGER
FkId INTEGER ; Foreign key to Table A

我希望计算每个 FkId值的出现次数:
SELECT FkId, COUNT(FkId) 
FROM B
GROUP BY FkId

现在,我只想从 Table A输出Name。

这将不起作用:
SELECT FkId, COUNT(FkId), a.Name
FROM B b
INNER JOIN A a ON a.Id=b.FkId
GROUP BY FkId

因为 a.Name子句中不包含 GROUP BY(会产生 is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause错误)。

关键是要像这样从输出中移出
FkId  Count
1 42
2 25

这样输出
FkId  Count  Name
1 42 Ronald
2 22 John

该错误消息在SO上有很多匹配项,但例如 https://stackoverflow.com/a/6456944/141172的注释类似“将在表上生成3次扫描,而不是1次,因此不会缩放”。

如何在查询输出中有效地包含联接的 Table B(与 FkId具有1:1关系)的字段?

最佳答案

您可以尝试如下操作:

   ;WITH GroupedData AS
(
SELECT FkId, COUNT(FkId) As FkCount
FROM B
GROUP BY FkId
)
SELECT gd.*, a.Name
FROM GroupedData gd
INNER JOIN dbo.A ON gd.FkId = A.FkId

创建一个CTE(公用表表达式)来处理 Table B上的分组/计数,然后将该结果(每个 FkId一行)连接到 Table A,并从 Table A中获取更多列到最终结果集中。

关于sql - 有效地包括不在SQL查询分组依据中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11369353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com