111

「時間」列があります 「種類」列があります (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 は私にエラーがあることを教えてくれます...エラーは何ですか!?

このスタックオーバーフローのトピックを参照してください: MySQL SUM IF フィールド b = フィールド a

.. 私はこれに答えることができません...

4

6 に答える 6

196

CASE次のステートメントを使用できます。

SELECT count(id), 
    SUM(hour) as totHour, 
    SUM(case when kind = 1 then 1 else 0 end) as countKindOne
于 2012-10-25T19:13:12.150 に答える
90

次のようなものが必要です:

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

2 番目の例は近いですが、IF() 関数は常に3 つの引数を取るため、COUNT(IF(kind=1,1,NULL)). 簡潔なので、上記の SUM() 構文を好みます。

于 2012-10-25T19:09:10.287 に答える
34

SUM + IF次よりも短い which を使用することもできます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
于 2015-05-31T02:27:26.087 に答える