加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

有用地包括不在SQL查询的Group By中的列

发布时间:2021-01-23 04:23:15 所属栏目:编程 来源:网络整理
导读:特定 表A. Id INTEGERName VARCHAR(50) 表B. Id INTEGERFkId INTEGER ; Foreign key to Table A 我想计较每个FkId值的呈现次数: SELECT FkId,COUNT(FkId) FROM B GROUP BY FkId 此刻我只想输出表A中的Name. 这不起浸染: SELECT FkId,COUNT(FkId),a.NameFROM

特定

表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

此刻我只想输出表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子句中(天生在选择列表中无效,由于它不包括在聚合函数或GROUP BY子句错误中).

重点是从这样的输出转移

FkId  Count
1      42
2      25

输出像这样

FkId  Count  Name
1      42     Ronald
2      22     John

对付该错误动静,在SO上存在相等多的匹配,可是譬喻https://stackoverflow.com/a/6456944/141172有一些评述,如“将在桌面上发生3次扫描,而不是1,因此不会缩放”.

如安在查询输出中有用地包括联接表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(公用表表达式)来处理赏罚表B上的分组/计数,然后将该功效(每个FkId一行)毗连到表A,并从表A中获取更多列到最终功效齐集.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读