2012-04-10 5 views
-1

My SQL, wie die Ergebnisse aus einer einfachen SQL-Abfrage

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

das Ergebnis sortieren Erzeugt:

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 

Aber ich will das Ergebnis sein:

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 

ich versucht habe, mehrere Möglichkeiten, aber es gab nicht das erwartete Ergebnis. Kannst du helfen?

+0

Bitte definieren, was die ' send 'und' no_send 'Spalten bedeuten. Sendet der Index eines bestimmten Sendeereignisses? Ich sehe nur 1s und 0s in dieser Spalte, deshalb ist nicht ganz klar, wie das erste Ergebnis dem gewünschten Ergebnis zugeordnet wird. –

Antwort

3

senden Unter der Annahme, hat einen Wert von 1 für Sende- und 0 für no_send Sie einfach Wert von Sende summieren können:

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 

würden jedoch allgemeine Muster sein:

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 
+0

danke, es hat richtig funktioniert – Alexd2