본문 바로가기
MySql

MySQL MYSQL : GROUP BY, LEFT JOIN 및 WHERE 절이있는 COUNT는 0 값을 반환하지 않습니다.

by 베이스 공부 2020. 11. 28.
반응형

나는 이것이 매우 간단한 대답을 가지고 있다고 확신하지만 그것을 찾을 수없는 것 같습니다 (무엇을 검색해야할지 모르겠습니다!). 쿼리 별 표준 개수 / 그룹은 다음과 같습니다.

SELECT COUNT(`t2`.`name`) 
FROM `table_1` `t1` 
    LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id` 
WHERE `t1`.`another_column` = 123 

그리고 이것은 예상대로 작동하며 행이 없으면 0을 반환합니다. 하나:

SELECT COUNT(`t2`.`name`) 
FROM `table_1` `t1` 
    LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id` 
WHERE `t1`.`another_column` = 123 
GROUP BY `t1`.`any_col` 

table_1에 적어도 하나의 행이있는 경우에만 작동하고 0 개의 행이 있으면 빈 결과 집합을 반환하는 데 실패합니다. 0을 반환하고 싶습니다! 누구든지 이것에 대해 나를 계몽합니까? 런던에있는 경우 맥주를 대가로 제공 할 수 있습니다 ;-)

 

해결 방법

 

0 행을 반환하는 이유는 table_1의 값을 기준으로 그룹화하기 때문입니다. table_1에 값이 없기 때문에 반환 할 행이 없습니다. 다른 방법으로 말하면 다음과 같이 GROUP BY에서 쿼리에 t1.any_col을 반환 한 경우 :

SELECT `t1`.`any_col`, COUNT(`t2`.`name`) 
FROM `table_1` `t1` 
    LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id` 
WHERE `t1`.`another_column` = 123 
GROUP BY `t1`.`any_col` 

행이 없을 때 t1.any_col에 대해 무엇을 표시합니까? 원하는 것을 달성하는 유일한 방법은 table_1에 행이 없는지 확인하는 다른 쿼리와 결과를 통합하는 것입니다. 이 예에서는 간단히 쿼리 할 수있는 항목을 갖기 위해 INFORMATION_SCHEMA 뷰를 사용하고 있습니다.

SELECT COUNT(`t2`.`name`) 
FROM `table_1` `t1` 
    LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id` 
WHERE `t1`.`another_column` = 123 
GROUP BY `t1`.`any_col` 
UNION ALL
SELECT 0
FROM INFORMATION_SCHEMA.TABLES
Where Not Exists( Select 1 From `table_1` )
LIMIT 1

 

참조 페이지 https://stackoverflow.com/questions/2730273

 

 

반응형

댓글