2011-10-27 9 views
1

通常は、SQLクエリでフィールドを選択します。例えばSQL:SELECTクエリ結果に列を追加する方法は?

SELECT A.id FROM Member A 

しかし、選択した他のフィールドに対応する要素の列を揃えたい場合はどうすればよいですか? たとえば、メンバテーブルからメンバIDを選択し、メンバが他のテーブルのタプルに何回出現するかをカウントするCOUNT

どのように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はまた、Bのいずれかの対応するレコードを持っていないのレコードが含まれます、COUNTのみ非カウントnull値なので、B.MemberIDと一緒に使用する必要があります。このようにして、Bの対応するレコードを持たないAのレコードの数は、B.MemberIDNULLになるため、0になります。

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は私の私のキーボードでOS:真剣に、良い点。 – SQLMason

+0

@DanAndrews:うん、Ctrl-CとCtrl-Vはこれまでずっと素晴らしい助けになっています。 ;) –

関連する問題