관계형 데이터베이스에 인라인 뷰라는 개념이 있습니다.
인라인 뷰를 활용하시면 되리라 봅니다.
관계대수에서 결과값 또한 하나의 릴레이션(즉 테이블)이 되지요, 이것을 다시 입력으로 활용할 수 있듯이 말입니다.
그럼 SQL을 써보지요
SELECT COUNT(*) FROM
(
SELECT DISTINCT sender AS sr FROM TT
UNION
SELECT DISTINCT receiver AS sr FROM TT
)
AS TTT
뷰 TTT가 sr이라는 필드를 갖고 있지요
물론 명시적으로 sr을 표현 하지 않아도 됩니다.
즉
SELECT COUNT(*) FROM
(
SELECT DISTINCT sender FROM TT
UNION
SELECT DISTINCT receiver FROM TT
)
AS TTT
해도 된다는 것이죠.
sender의 개수만을 구하시려면
SELECT COUNT(*) FROM
(SELECT DISTINCT sender FROM TT) AS TTT
하시면 되겠지요
DISTINCT는 결과집합에서 중복을 제거하는 키워드입니다.
그럼 좋은 결과 있기를 바랍니다.
-- 김완규 님이 쓰신 글:
>> 가령 아래와 같은 table "TT" 에서
>>
>> sender receiver time
>> A B 1
>> A C 2
>> B D 1
>> C A 2
>>
>> sender의 종류(A,B,C)의 갯수(3)을 구하려고
>>
>> : SELECT count(*) FROM TT GROUP BY sender ;
>>
>> 하면 주루룩 나오고 마지막에 3 rows가 선택되었다고 나옵니다.
>> 이것을 단지 3 만 출력하고 싶으면 어떻게 하나요?
>>
>> 또한 두개의 field에 걸쳐서, 즉 sender와 receiver를 합친 종류(A,B,C,D)
>> 의 갯수, 즉 4를 구하려면 어떻게 해야할지 모르겠습니다.
>>
>> 파이썬 프로그램에서 제어를 하려고 하는데, 물론 위 SQL문으로 결과를
>> 받아서 결과의 갯수를 세는 방법도 있습니다만..깔끔하게 SQL문 자체에서
>> 종류의 숫자만 받고 싶은데 잘 모르겠네요.
>> 그리고 아래 두 개의 Field에 걸쳐서 종류를 구하려면 어떻게 해야할지..
>> SQL문만 가지고는 불가능한 것인지요??
|