2011-09-01 5 views
5

보통 나는 SQL 쿼리에 대한 자신감이 있지만,이 질문은 저의 머리를 긁적니다. 나는 이것 같이 느낀다 - 빠른 수정이어야한다, 그러나 나는 다만 그것을 보지 않고있다.MySQL : 열을 개별적으로 계산하는 방법은 무엇입니까?

하나의 쿼리에서 동일한 테이블의 여러 값에 대해 계산을 수행하려고합니다.

"0000000000000000"이 단지 빈 바이트 배열을 나타내는 것에 신경 쓰지 마십시오.

이러한 검색어를 결합하는 쉬운 방법이 있습니까? 나는이 일을 할 생각

SELECT COUNT(ssn) AS patient_count, 'ssn' AS count_type 
FROM patients 
WHERE ssn="0000000000000000"; 
UNION 
SELECT COUNT(firstname) AS patient_count, 'firstname' AS count_type 
FROM patients 
WHERE firstname="0000000000000000" 
UNION 
SELECT COUNT(lastname) AS patient_count, 'lastname' AS count_type 
FROM patients 
WHERE lastname="0000000000000000" 

답변

2

UNION과 시도?

SELECT * 
FROM 
(SELECT COUNT(ssn) AS ssn_count 
FROM patients 
WHERE ssn="0000000000000000") AS ssn 
CROSS JOIN 
(SELECT COUNT(firstname) AS firstname_count 
FROM patients 
WHERE firstname="0000000000000000") AS firstname 
CROSS JOIN 
(SELECT COUNT(lastname) AS lastname_count 
FROM patients 
WHERE lastname="0000000000000000") AS lastname 
+0

테이블을 피벗 할 수있는 방법이 있습니까? 내 타일을 헤더가 아닌 값으로 사용하는 것이 더 좋을 것입니다. – theangryhornet

+2

UNION 대신 UNION ALL을 넣을 수 있습니다. SQL Server에 약간의 중복 작업을 저장하기 위해서입니다. – James

1

당신이 뭔가를 할 수

SELECT COUNT(ssn) 
FROM patients 
WHERE ssn="0000000000000000"; 
UNION 
SELECT COUNT(firstname) 
FROM patients 
WHERE firstname="0000000000000000" 
UNION  
SELECT COUNT(lastname) 
FROM patients 
WHERE lastname="0000000000000000" 
+2

여기서 '유니온 모두'를 사용하고 싶습니다. 두 개 (또는 심지어 세 개)의 카운트가 동일한 경우, 'UNION'은 이들을 중복으로 제거합니다. –

+0

숫자가 어느 것인지 구분할 수 없으므로이 것이 마음에 드는지 잘 모르겠습니다. – theangryhornet

+0

당신은 이것을 설명하기 위해 또 다른 칼럼을 넣을 수 있습니다. –

6
SELECT SUM(CASE WHEN ssn = '0000000000000000' THEN 1 ELSE 0 END) AS ssn_count, 
     SUM(CASE WHEN firstname = '0000000000000000' THEN 1 ELSE 0 END) AS first_count, 
     SUM(CASE WHEN lastname = '0000000000000000' THEN 1 ELSE 0 END) AS last_count 
    FROM patients 
    WHERE ssn = '0000000000000000' 
     OR firstname = '0000000000000000' 
     OR lastname = '0000000000000000' 
+0

멋지다. 아래 "통합"솔루션과 성능면에서 어떻게 비교한다고 생각하십니까? – Marvo

+3

@Marvo : 내 표준 대답은 둘 다 시도하고 비교하는 것입니다. 나는 이것이 1 대 3 대 선택이므로 더 좋을 것이라고 생각한다. –

+0

매우 흥미로운 접근법! – theangryhornet

1

-

SELECT COUNT(ssn) 
FROM patients 
WHERE ssn="0000000000000000"; 

SELECT COUNT(firstname) 
FROM patients 
WHERE firstname="0000000000000000" 

SELECT COUNT(lastname) 
FROM patients 
WHERE lastname="0000000000000000" 

etc... 
관련 문제