2011-10-27 3 views
1

일반적으로 SQL 쿼리에서 필드를 선택합니다. 예 :SQL : SELECT 쿼리 결과에 열을 추가하는 방법은 무엇입니까?

SELECT A.id FROM Member A 

그러나 선택한 요소와 일치하는 열을 정렬하려면 어떻게해야합니까? 예를 들어 멤버 테이블에서 멤버 ID를 선택하고 다른 테이블의 튜플에 멤버가 몇 번 나타날지 계산하는 숫자는

그래서 선택 항목과 함께 정렬되는 COUNT 열을 어떻게 만듭니 까? 결과? , COUNT은 비 계산

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에 해당하는 모든 기록이없는 레코드가 포함됩니다 : 내가 제대로 이해하면

답변

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

0에 대해 신경 쓰지 않았다면 옳을 것입니다. – SQLMason

+0

아니지만, 당신 말이 맞아요, 누군가가 ;-) – Jack

5

, 이것은 당신이 원하는 무엇인가 null 값이므로 B.MemberID과 함께 사용해야합니다. 이렇게하면 B.MemberIDNULL이 될 것이므로 B에서 해당 레코드가없는 A의 레코드 수는 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는 그토록 훌륭한 도움입니다. ;) –

관련 문제