2016-04-02 8 views
0
SELECT 
    t1.user_id, 
    count(*) total, 
    sum(case when t1.var1 = 'yes' then 1 else 0 end) as type1, 
    sum(case when t1.var1 = 'no' then 1 else 0 end) as type2 
FROM table as t1 
WHERE type1 > 0 
GROUP by t1.user_id 
ORDER by type1 DESC 
LIMIT 100 

In Folge i erhalten Reihen:mysql - warum Zustand wo nicht funktioniert?

user_id total type1 type2 
    1  100 80  20 
    4  120 70  50 
    6  90  0  90 

mir bitte erklären, warum Bedingung WHERE type1 > 0 nicht funktionieren und wie wählen Sie Zeilen mit diesem Zustand?

+0

machen Sie eine SQL-Geige für diese Fragen, es macht es einfacher für uns, Zeug zu versuchen: http://sqlfiddle.com/ – Jester

+0

... und zeigen Sie die ursprünglichen Tabellen (und ihre Daten), die Sie abfragen. – Stuart

Antwort

1

Die WHERE funktioniert nur auf den ursprünglichen Wert und nicht auf einer Variablen, die Sie gerade gemacht, indem sie die anderen Werte bis Summieren, können Sie HAVING für diesen Einsatz:

SELECT 
t1.user_id, 
count(*) total, 
sum(case when t1.var1 = 'yes' then 1 else 0 end) as type1, 
sum(case when t1.var1 = 'no' then 1 else 0 end) as type2 
FROM table as t1 
GROUP by t1.user_id 
HAVING type1 > 0 
ORDER by type1 DESC 
LIMIT 100 

Sehen Sie hier für ein anderes Beispiel HAVING der Verwendung: http://www.w3schools.com/sql/sql_having.asp

+0

Kein Problem :) Vergessen Sie nicht, eine Antwort zu markieren, damit Ihre Frage nicht als ungelöst angezeigt wird, sondern nur, wenn Sie keine Fragen mehr haben, ansonsten beantworte ich gerne weitere Fragen zu diesem ^^ – Jester