Ell*_*bar 5 sql select group-by
我有' 人 '的桌子
列
和表'' 注释 ':
列
我想从人员表中选择所有作者的笔记数量及其名称和年龄,但我想用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)
当我选择数据时,如果我想选择此列,我也必须按名称分组,因为如果我不这样做,我会收到错误.
由于您希望从表中获取所有记录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)