[SQL] MySQL의 GROUP BY와 리턴 수 0
SQLMySQL의 GROUP BY와 리턴 수 0
이 같은 데이터베이스 테이블
============================
= suburb_id | value
= 1 | 2
= 1 | 3
= 2 | 4
= 3 | 5
쿼리는
SELECT COUNT(suburb_id) AS total, suburb_id
FROM suburbs
where suburb_id IN (1,2,3,4)
GROUP BY suburb_id
나는이 쿼리를 실행하는 동안 그러나, 그것은하지 않습니다주고 COUNT (suburb_id) = 0 때 suburb_id = 0 교외 테이블에, 더 suburb_id 4 없기 때문에,이 쿼리처럼 suburb_id = 4 0을 반환하려면
============================
= total | suburb_id
= 2 | 1
= 1 | 2
= 1 | 3
= 0 | 4
해결법
-
==============================
1.그룹에 의해 당신이 특정 범주에 대한 행이, 당신은 수를 얻을 않을 수없는 제품도 있습니다 그렇다면, 함께 작동하도록 행을 필요로한다. 그들이 함께 그룹화하기 전에 소스 행을 제한하는 등의 where 절을 생각하십시오. WHERE 절은에 의해 그룹 카테고리의 목록을 제공하지 않습니다.
그룹에 의해 당신이 특정 범주에 대한 행이, 당신은 수를 얻을 않을 수없는 제품도 있습니다 그렇다면, 함께 작동하도록 행을 필요로한다. 그들이 함께 그룹화하기 전에 소스 행을 제한하는 등의 where 절을 생각하십시오. WHERE 절은에 의해 그룹 카테고리의 목록을 제공하지 않습니다.
당신이 할 수있는 것은 다음 하위 쿼리의 수를 할 범주 (교외)를 선택하는 쿼리를 작성합니다. (나는이 MySQL의 지원이 어떤지 잘 모르겠어요)
뭔가 같은 :
SELECT s.suburb_id, (select count(*) from suburb_data d where d.suburb_id = s.suburb_id) as total FROM suburb_table s WHERE s.suburb_id in (1,2,3,4)
(MSSQL, 사과)
-
==============================
2.이:
이:
SELECT id, COUNT(suburb_id) FROM ( SELECT 1 AS id UNION ALL SELECT 2 AS id UNION ALL SELECT 3 AS id UNION ALL SELECT 4 AS id ) ids LEFT JOIN suburbs s ON s.suburb_id = ids.id GROUP BY id
아니면 이거:
SELECT id, ( SELECT COUNT(*) FROM suburb WHERE suburb_id = id ) FROM ( SELECT 1 AS id UNION ALL SELECT 2 AS id UNION ALL SELECT 3 AS id UNION ALL SELECT 4 AS id ) ids
이 문서에서는 두 가지 방법의 성능을 비교 :
, 만 4 레코드를 쿼리하는대로, 귀하의 경우에는 많은 문제가되지 않지만.
-
==============================
3.질문:
질문:
select case when total is null then 0 else total end as total_with_zeroes, suburb_id from (SELECT COUNT(suburb_id) AS total, suburb_id FROM suburbs where suburb_id IN (1,2,3,4) GROUP BY suburb_id) as dt
-
==============================
4.모든 조건이이 경우에 같은 간단한 경우 @ geofftnz의 솔루션은 잘 작동합니다. 하지만 난 그냥 보고서의 각 열은 다른 쿼리입니다 보고서를 생성하기 위해 비슷한 문제를 해결했다. 당신은 몇 가지 선택 문이 힘 작업과 같은 무언가로부터 결과를 결합해야합니다.
모든 조건이이 경우에 같은 간단한 경우 @ geofftnz의 솔루션은 잘 작동합니다. 하지만 난 그냥 보고서의 각 열은 다른 쿼리입니다 보고서를 생성하기 위해 비슷한 문제를 해결했다. 당신은 몇 가지 선택 문이 힘 작업과 같은 무언가로부터 결과를 결합해야합니다.
당신은 프로그램이 쿼리를 생성 할 수 있습니다. 주어진 ID로 suburb_id 할 경기가없는 경우에도 쿼리가 왼쪽을 허용 조인 사용하여 행을 반환합니다. 만약 (대부분 않습니다), 당신은 0 널 (null)을 대체 할 IFNULL를 사용할 수있는 DB 지원을 :
select IFNULL(a.count,0), IFNULL(b.count,0), IFNULL(c.count,0), IFNULL(d.count,0) from (select count(suburb_id) as count from suburbs where id=1 group by suburb_id) a, left join (select count(suburb_id) as count from suburbs where id=2 group by suburb_id) b on a.suburb_id=b.suburb_id left join (select count(suburb_id) as count from suburbs where id=3 group by suburb_id) c on a.suburb_id=c.suburb_id left join (select count(suburb_id) as count from suburbs where id=4 group by suburb_id) d on a.suburb_id=d.suburb_id;
이것에 대해 좋은 점은 (필요한 경우)이 각각 "왼쪽 가입"약간 다른 (아마도 매우 복잡한) 쿼리를 사용할 수 있습니다.
면책 조항 : 대용량 데이터 세트에 대한 쿼리의 유형 (I 더 조사하지 않고 알 수있는 충분한 SQL을 작성하지 않는) 매우 잘 수행 할 수도 있지만, 적어도 그것은 유용한 결과를 제공해야합니다 ;-)
from https://stackoverflow.com/questions/3597577/return-count-0-with-mysql-group-by by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 오라클 MD5 해시 함수를 호출하는 방법? (0) | 2020.07.13 |
---|---|
[SQL] SQL : 교차와 구문 오류? (0) | 2020.07.13 |
[SQL] 지정한 캐스트가 검색 중 SCOPE_IDENTITY 동안 유효하지 않습니다 (0) | 2020.07.13 |
[SQL] SQL 빼기 정확히 년 (0) | 2020.07.13 |
[SQL] 나는 여러 테이블에서 같은 열이 있고, 특정 값으로 모든 테이블에서 해당 열을 업데이트 할. 이걸 어떻게 할 수 있습니까? (0) | 2020.07.13 |