通常我们会选择SQL查询中的字段。例如SQL:如何在SELECT查询结果中添加一列?
SELECT A.id FROM Member A
但是,如果我想要对齐一个列对应于其他选定字段的列,该怎么办? 例如,我想从成员表中选择成员ID,并计算该成员在其他表的元组中显示的次数的计数。
那么如何使COUNT列与select结果?
通常我们会选择SQL查询中的字段。例如SQL:如何在SELECT查询结果中添加一列?
SELECT A.id FROM Member A
但是,如果我想要对齐一个列对应于其他选定字段的列,该怎么办? 例如,我想从成员表中选择成员ID,并计算该成员在其他表的元组中显示的次数的计数。
那么如何使COUNT列与select结果?
select member_id, count(*)
from table
group by member_id;
如果我理解正确的你,这是你想要什么:
SELECT A.id, count(B.MemberID)
FROM Member A
LEFT JOIN TableB B on A.id = B.MemberID
group by A.id
的LEFT JOIN
将包括A记录没有在B.同时,任何相应的记录,COUNT
只能算作非空值,所以你需要使用它B.MemberID
。这样A中没有任何相应记录的记录在B中的计数将为0,因为B.MemberID
将是NULL
。
我同意@Adrian的解决方案,但是如果原始SELECT列表中有很多列,它们都必须在GROUP BY中列出。我的意思是这样的:
SELECT
A.id,
A.name,
A.whatever,
...
COUNT(B.member_id)
FROM Member A
LEFT JOIN Member_Something B ON A.id = B.member_id
GROUP BY
A.id,
A.name,
A.whatever,
...
它并不总是很方便,尤其是当列实际上是表达式。你可以采取另一种方法:
SELECT
A.id,
A.name,
A.whatever,
...
COALESCE(B.member_count, 0)
FROM Member A
LEFT JOIN (
SELECT member_id, COUNT(*) AS member_count
FROM Member_Something
GROUP BY member_id
) B ON A.id = B.member_id
+1为了达到一个新的水平 –
@Andriy:我不知道你,但CTRL-C和CTRL-V在我的作品操作系统与我的键盘:D认真,好点。 – SQLMason
@DanAndrews:是的,Ctrl-C和Ctrl-V永远是这样一个美妙的帮助,我们会在哪里没有它。 ;) –
如果你不关心0,你会是对的。 – SQLMason
我不知道,但你是对的,有人可能;-) – Jack