2011-10-27 258 views
1

通常我们会选择SQL查询中的字段。例如SQL:如何在SELECT查询结果中添加一列?

SELECT A.id FROM Member A 

但是,如果我想要对齐一个列对应于其他选定字段的列,该怎么办? 例如,我想从成员表中选择成员ID,并计算该成员在其他表的元组中显示的次数的计数。

那么如何使COUNT列与select结果?

回答

0
select member_id, count(*) 
from table 
group by member_id; 
+0

如果你不关心0,你会是对的。 – SQLMason

+0

我不知道,但你是对的,有人可能;-) – Jack

5

如果我理解正确的你,这是你想要什么:

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

2

我同意@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 
+0

+1为了达到一个新的水平 –

+0

@Andriy:我不知道你,但CTRL-C和CTRL-V在我的作品操作系统与我的键盘:D认真,好点。 – SQLMason

+0

@DanAndrews:是的,Ctrl-C和Ctrl-V永远是这样一个美妙的帮助,我们会在哪里没有它。 ;) –

相关问题