Nice programing

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

nicepro 2020. 12. 9. 21:43
반응형

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


'시간'열이 있습니다. '종류'열이 있습니다 (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 () 함수는 항상 세 개의 인수를 사용하므로이어야 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)있습니다.

열의 모든 값 kindNULL인 경우의 결과 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

반응형