2016-06-10 14 views
1

Ich habe eine Abfrage wie folgt vor:Sum-Funktion in MySQL mit inneren Abfrage

select b.*, SUM(h.points) as points 
    from brands b left join 
    histories h 
    on b.id = h.brandid and h.userId = $userId 
    where b.id=$brandId and b.active=1 
    group by b.id 
    limit 1 

ich nur Punkte für folgende Fälle summieren möchten:

where h.type != 10, h.points !=0 and points should be between two dates like this: h.time between '2016-06-01' and '2016-06-31'... 

Ich denke dies geschehen könnte durch mit einer Sub-Abfrage, aber ich bin mir nicht sicher, wie ... Kannst du mir helfen, Jungs?

Die gewünschte Ausgabe wäre:

userId brandId points 

1   64  155 

1   15  100 

Und so weiter, dass ich jede summierte Punkte gut für jeden Benutzer, der diese Punkte in zwischen zwei Terminen und dass die Art der Punkte erzielt hat, ist nicht = 10! ;

Die Tabellenstruktur ist wie folgt:

Brands => Histories <= Users 
+0

Wenn Sie möchten, sollten Sie nach dieser einfachen zweistufigen Vorgehensweise: 1. Wenn Sie dies noch nicht getan haben, bieten die richtige CREATE und INSERT Anweisungen (und/oder eine SQLFiddle), damit wir das Problem leichter replizieren können. 2. Wenn Sie dies noch nicht getan haben, geben Sie ein gewünschtes Ergebnisset ein, das den Angaben in Schritt 1 entspricht. – Strawberry

Antwort

3
select b.id, 
sum(case when h.type <> 10 and h.time between '2016-06-01' and '2016-06-31' then h.points 
    else 0 end) as points 
from brands b 
left join histories h on b.id = h.brandid and h.userId = $userId 
and b.active=1 and b.id=$brandId 
group by b.id 
+0

Es funktioniert perfekt, danke Kumpel !!! :) :) :) – perkes456