programing

GROUP BY에 행이 없을 때 COUNT() 값을 얻으려면 어떻게 해야 합니까?

itsource 2022. 10. 25. 21:55
반응형

GROUP BY에 행이 없을 때 COUNT() 값을 얻으려면 어떻게 해야 합니까?

RDMS : MariaDB 10.1.23

MCRE:

create table entity
(
    id_entity int auto_increment,
    created_at timestamp default CURRENT_TIMESTAMP,
    constraint product_log_pk
        primary key (id_entity)
);

INSERT INTO entity SET created_at = CURRENT_TIMESTAMP;
INSERT INTO entity SET created_at = CURRENT_TIMESTAMP;
INSERT INTO entity SET created_at = CURRENT_TIMESTAMP;

-- I would like this to return 0
SELECT IF(COUNT(e.id_entity) = 0, 0, e.id_entity) 
FROM entity e
WHERE e.created_at < CURRENT_DATE - INTERVAL 1 DAY GROUP BY e.created_at;

SQLFiddle: http://sqlfiddle.com/ #!9/f32a01/1


다음 쿼리를 고려합니다.

SELECT IF(COUNT(e.some_field) = 0, 0, e.some_field) 
FROM entity e
WHERE e.created_at > CURRENT_DATE - INTERVAL 1 DAY GROUP BY e.created_at

절이 GROUP BY 절을 알 수 .COUNT()0★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

BY가 「했을 「GROUP BY」를 만족시키는 도 있습니다.e.created_at > CURRENT_DATE - INTERVAL 1 DAY「COUNT」(0)입니다.COUNT 해야 합니까(COUNT() ).0이??이?

그룹화는 구가 평가된 후에 수행됩니다.where 구가 모든 행을 삭제하면 그룹화할 필요가 없습니다.

당신은 조건부 집계를 원하는 것 같습니다.다음은 예를 제시하겠습니다.

name | dept | gender
-----+------+-------
jane | acc  | f
john | acc  | m
jack | hr   | m
jake | hr   | m

그리고 부서별로 모든 여성 직원을 집계하기 위한 질문:

SELECT dept, COUNT(CASE WHEN gender = 'f' THEN 1 END)
FROM employee
-- WHERE gender = ... will/could eliminate entire group(s)
GROUP BY dept
dept | count
-----+------
acc  | 1
hr   | 0

당당 、 한에에줄줄경 아아것 。요, 뺄게요, 뺄게요.GROUP BY.

난 이게 뭔지 전혀 모르겠어IF()로 되어 있다

SELECT COUNT(e.some_field)
FROM entity e
WHERE e.created_at > CURRENT_DATE - INTERVAL 1 DAY ;

i를 some_field , , , 「 」GROUP_CONCAT()을 한: 이 、 이 、 will 、 will 、 will 、 will will will will will will will will will will will will will will will will will will::: 。

SELECT GROUP_CONCAT(e.some_field)
FROM entity e
WHERE e.created_at > CURRENT_DATE - INTERVAL 1 DAY ;

모두 항상 1개의 행을 반환합니다.이것은, 이러한 행은 집약 쿼리이기 때문에,GROUP BY하는 것은 " " " 입니다0 두 번째 '두 번째'는NULL일치하는 행이 없는 경우.

'표준' 방법은

 COALESCE(value, 0)

일반적으로 다음과 같이 사용됩니다.

COALESCE( ( SELECT COUNT(*) ... ), 0)

언급URL : https://stackoverflow.com/questions/60599710/how-to-get-a-count-value-when-group-by-has-no-row

반응형