[SQL] 어떻게 COUNT 집계에서 "제로"/ "0"을 포함하는?
SQL어떻게 COUNT 집계에서 "제로"/ "0"을 포함하는?
난 그냥 조금 일부 SQL 붙어 자신을 가지고있다. 그래서 내가 당신을 보여 드리죠 - 나는 훌륭하게 표현 질문을 할 수 있다고 생각하지 않습니다.
나는 두 테이블, 하나라는 사람이 하나라는 약속이있다. 나는 사람이 (가 제로가있는 경우 포함) 한 약속의 수를 반환하기 위해 노력하고있어. 약속은 person_id로를 포함하고 약속 당 person_id로가있다. COUNT 그래서 (person_id로) 현명한 방법입니다.
쿼리 :
SELECT person_id, COUNT(person_id) AS "number_of_appointments"
FROM appointment
GROUP BY person_id;
, 정확하게 person_id로는이 약속의 수를 반환합니다. 그러나 0 약속이있는 사람은 (그들이 그 테이블에없는 분명히으로) 반환되지 않습니다.
사람 테이블에서 person_id로 취할 수있는 문을 미세 조정하는 것은 나에게 뭔가를 제공합니다 :
SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments"
FROM appointment
JOIN person ON person.person_id = appointment.person_id
GROUP BY person.person_id;
그러나 이것은 여전히 약속이있는 person_id로를 반환하고 나는 0 약속이 사람과 반환되는 원하지 않을 것!
모든 제안을 기쁘게?
해결법
-
==============================
1.당신은 바깥이 조인 (그리고 당신이 "운전"테이블로 사람을 사용해야합니다)합니다
당신은 바깥이 조인 (그리고 당신이 "운전"테이블로 사람을 사용해야합니다)합니다
SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments" FROM person LEFT JOIN appointment ON person.person_id = appointment.person_id GROUP BY person.person_id;
이 작업을하는 이유는, (왼쪽) 외부 약속을하지 않는 사람을위한 NULL을 반환에 참여한다는 것입니다. 집계 함수의 수는 () NULL 값을 계산하지 않습니다 따라서 당신은 0을 얻을 것이다.
당신이 외부 조인에 대해 더 배우고 싶은 경우에, 여기에 좋은 튜토리얼은 다음과 같습니다 http://sqlzoo.net/wiki/Using_Null
-
==============================
2.당신은 가입 가입 대신 INNER LEFT를 사용해야합니다
당신은 가입 가입 대신 INNER LEFT를 사용해야합니다
SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments" FROM person LEFT JOIN appointment ON person.person_id = appointment.person_id GROUP BY person.person_id;
-
==============================
3.당신이 외부 (개수로)에 가입 한 후 하위 테이블로이 결과를 사용하는 경우합니다 (NVL 기능 덕분에) 예상대로, 당신은 공을 얻을 수 있습니다
당신이 외부 (개수로)에 가입 한 후 하위 테이블로이 결과를 사용하는 경우합니다 (NVL 기능 덕분에) 예상대로, 당신은 공을 얻을 수 있습니다
전의:
select P.person_id, nvl(A.nb_apptmts, 0) from (SELECT person.person_id FROM person) P LEFT JOIN (select person_id, count(*) as nb_apptmts from appointment group by person_id) A ON P.person_id = A.person_id
-
==============================
4.사용은 GROUP BY를 사용하여 결과 0 수를 얻기 위해 가입 할 수 있습니다.
사용은 GROUP BY를 사용하여 결과 0 수를 얻기 위해 가입 할 수 있습니다.
단순히 '참여'내부 왼쪽 또는 오른쪽 조인, 그래서 MS SQL에서 이동을 가입한다.
기본 키가 들어있는 테이블이 쿼리에서 처음 언급되고있는 경우 RIGHT 가입 다른 조인 LEFT를 사용합니다.
EG :
select WARDNO,count(WARDCODE) from MAIPADH right join MSWARDH on MSWARDH.WARDNO= MAIPADH.WARDCODE group by WARDNO
.
select WARDNO,count(WARDCODE) from MSWARDH left join MAIPADH on MSWARDH.WARDNO= MAIPADH.WARDCODE group by WARDNO
실제 항목 / 세부 사항이있는 다른 테이블의 기본 키와 수를 가지고있는 테이블로 그룹을 가져 가라.
-
==============================
5.원래 쿼리에 덜 심지어 변경하려면 조인 RIGHT에 가입하여 설정할 수 있습니다
원래 쿼리에 덜 심지어 변경하려면 조인 RIGHT에 가입하여 설정할 수 있습니다
SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments" FROM appointment RIGHT JOIN person ON person.person_id = appointment.person_id GROUP BY person.person_id;
이것은 단지 선택한 답변을 기반으로하지만, 외부 조인으로 하나의 단어 요구가 추가 적은 변화 할 올바른 방향입니다. - 그냥 거기 때로는 쿼리를 더 읽기 쉽게 적은 재건 요구할 수 있음을 기억하십시오.
-
==============================
6.왼쪽 가입에 대한 문제는 어떤 약속이 없을 경우, 여전히 1이 될 것이다 COUNT 집계 널, 하나 개의 행을 반환하고, 실제로 그들은 아무도 없어 때 사람이 한 약속을 가지고 나타날 것입니다. 나는 이것이 올바른 결과를 얻을 생각 :
왼쪽 가입에 대한 문제는 어떤 약속이 없을 경우, 여전히 1이 될 것이다 COUNT 집계 널, 하나 개의 행을 반환하고, 실제로 그들은 아무도 없어 때 사람이 한 약속을 가지고 나타날 것입니다. 나는 이것이 올바른 결과를 얻을 생각 :
SELECT person.person_id, (SELECT COUNT(*) FROM appointment WHERE person.person_id = appointment.person_id) AS 'Appointments' FROM person;
from https://stackoverflow.com/questions/14793057/how-to-include-zero-0-results-in-count-aggregate by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 가입과 방법을 찾을 수 CakePHP의 (0) | 2020.04.06 |
---|---|
[SQL] 어떻게 SQL Server에서 문자열의 각 단어의 첫 글자를 대문자로 할 수있는 가장 좋은 방법 (0) | 2020.04.06 |
[SQL] 어떻게 인쇄 문을 사용하여 VARCHAR (MAX)를 인쇄하려면? (0) | 2020.04.06 |
[SQL] SQL 서버 에포크 소인 변환 (사람이 읽을 수있는 형식) (0) | 2020.04.06 |
[SQL] 어떻게 XSD 파일에서 데이터베이스 테이블을 만들 수 있습니까? (0) | 2020.04.06 |