带有GROUP BY id的T-SQL SELECT

Ell*_*bar 5 sql select group-by

我有' '的桌子

  • ID
  • 名称
  • 年龄

和表'' 注释 ':

  • ID
  • 文本
  • FK_Author

我想从人员表中选择所有作者的笔记数量及其名称和年龄,但我想用PERSON ID对其进行分组,而不是名称.人们有相同名称的情况很多,但ID显然总是不同.

示例(输入)

人:

????????????????????
? ID ? NAME  ? AGE ?
????????????????????
?  1 ? John  ?  12 ?
?  2 ? Annie ?  29 ?
?  3 ? John  ?  44 ?
????????????????????
Run Code Online (Sandbox Code Playgroud)

笔记:

??????????????????????????
? ID ? TEXT  ? FK_AUTHOR ?
??????????????????????????
?  1 ? 'aaa' ?         1 ?
?  2 ? 'aaa' ?         1 ?
?  3 ? 'aaa' ?         2 ?
?  4 ? 'aaa' ?         2 ?
?  5 ? 'aaa' ?         3 ?
??????????????????????????
Run Code Online (Sandbox Code Playgroud)

预期结果:

????????????????????????????
? NAME  ? AGE ? TOTALCOUNT ?
????????????????????????????
? John  ?  12 ?          2 ?
? Annie ?  29 ?          2 ?
? John  ?  44 ?          1 ?
????????????????????????????
Run Code Online (Sandbox Code Playgroud)

当我选择数据时,如果我想选择此列,我也必须按名称分组,因为如果我不这样做,我会收到错误.

Joh*_*Woo 7

由于您希望从表中获取所有记录People,因此您需要Notes使用它来加入它,LEFT JOIN因此任何没有任何记录的用户Notes都将包含在列表中,其中v值totalCount为零.

SELECT  a.ID, a.Name, a.Age,
        COUNT(b.FK_Author) totalCount
FROM    People a
        LEFT JOIN Notes b
            ON a.ID = b.FK_Author
GROUP   BY a.ID, a.Name, a.Age
Run Code Online (Sandbox Code Playgroud)

要进一步了解联接,请访问以下链接:

OUTPUT

?????????????????????????????????
? ID ? NAME  ? AGE ? TOTALCOUNT ?
?????????????????????????????????
?  1 ? John  ?  12 ?          2 ?
?  2 ? Annie ?  29 ?          2 ?
?  3 ? John  ?  44 ?          1 ?
?????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

  • 没有.你错了.此查询将为您提供所需的结果.请记住,您在`GROUP BY`子句中包含`ID` (2认同)