programing

MySql: 'SUM IF' 또는 'COUNT IF'가 가능합니까?

yoursource 2022. 12. 11. 10:35
반응형

MySql: 'SUM IF' 또는 'COUNT IF'가 가능합니까?

'hour' 열이 있고 'kind' 열이 있습니다(1, 2 또는 3일 수 있음).

저는 다음과 같은 것을 하고 싶습니다.

SELECT count(id), SUM(hour) as totHour, SUM( IF ( kind = 1, 1, 0 ) ) as countKindOne

또는

SELECT count(id), SUM(hour) as totHour, COUNT( IF ( kind = 1 ) ) as countKindOne

하지만 mysql은 나에게 오류가 있다고 말했다...뭐가 잘못됐어!?

다음 stackoverflow 항목을 참조하십시오.MySQL SUM IF 필드 b = 필드 a

..대답할 수 없습니다...

를 사용할 수 있습니다.CASE스테이트먼트:

SELECT count(id), 
    SUM(hour) as totHour, 
    SUM(case when kind = 1 then 1 else 0 end) as countKindOne

다음과 같은 것이 필요합니다.

SELECT count(id), SUM(hour) as totHour, SUM(kind=1) as countKindOne;

두 번째 예는 비슷하지만 IF() 함수는 항상 3개의 인수를 사용하기 때문에 다음과 같이 해야 합니다.COUNT(IF(kind=1,1,NULL))위의 SUM() 구문은 간결하기 때문에 선호합니다.

를 사용할 수도 있습니다.SUM + IF보다 짧다SUM + CASE:

SELECT
    count(id)
    , SUM(IF(kind=1, 1, 0)) AS countKindOne
    , SUM(CASE WHEN kind=2 THEN 1 ELSE 0 END) AS countKindTwo

상위 답변에는 약간의 차이가 있습니다. 즉,SUM(case when kind = 1 then 1 else 0 end)그리고.SUM(kind=1).

열의 모든 값인 경우kind공교롭게도 그렇다NULL, 의 결과SUM(case when kind = 1 then 1 else 0 end)0단, 의 결과는SUM(kind=1)NULL.

예(http://sqlfiddle.com/#!9/b23807/2)

스키마:

CREATE TABLE Table1
(`first_col` int, `second_col` int)
;

INSERT INTO Table1
    (`first_col`, `second_col`)
VALUES
       (1, NULL),
       (1, NULL),
       (NULL, NULL)
;

쿼리 결과:

SELECT SUM(first_col=1) FROM Table1;
-- Result: 2
SELECT SUM(first_col=2) FROM Table1;
-- Result: 0
SELECT SUM(second_col=1) FROM Table1;
-- Result: NULL
SELECT SUM(CASE WHEN second_col=1 THEN 1 ELSE 0 END) FROM Table1;
-- Result: 0

MYSQL에서 다음과 같이 문제를 해결했습니다.

SUM(CASE WHEN used = 1 THEN 1 ELSE 0 END) as amount_one,

이것이 도움이 되기를 바랍니다.d

Gavin Toweys의 답변을 바탕으로 다음과 같은 쿼리 전체에서 여러 필드를 사용할 수 있습니다.

SUM(table.field = 1 AND table2.field = 2)

다음 구문을 사용할 수도 있습니다.COUNT다른 기능도 있을 거예요.

언급URL : https://stackoverflow.com/questions/13075505/mysql-is-it-possible-to-sum-if-or-to-count-if

반응형