-1

私のSQL

SELECT nce.id, nce.send, count( * ) AS total
FROM `newsletter_email` nce
WHERE 1
GROUP BY nce.id, nce.send

結果を生成します:

id  send    total
4   0       6
4   1       1
5   0       2
6   1       7
7   1       4
8   0       2
8   1       4
9   1       1

しかし、私は結果を次のようにしたいと思います。

id  send    no_send     total
4   6       1           7
5   0       2           2
6   7       0           7
7   4       0           4
8   4       2           6
9   1       0           1

いくつかの方法を試しましたが、期待した結果が得られませんでした。手伝ってくれますか?

4

1 に答える 1

3

Sendの値がsendの場合は1、no_sendの場合は0であるとすると、sendの値を単純に合計できます。

SELECT nce.id, 
   sum(nce.send) as Send, 
   sum(1 - nce.send) as NO_send, 
   count(nce.send) as Total
FROM `newsletter_email` nce
GROUP BY nce.id

ただし、一般的なパターンは次のようになります。

SELECT nce.id, 
   sum(case when nce.send = 1 then 1 end) as Send, 
   sum(case when nce.send = 0 then 1 end) as NO_send, 
   count(nce.send) as Total
FROM `newsletter_email` nce
GROUP BY nce.id
于 2012-04-10T00:58:30.690 に答える