OR Klausel bei Group By

HRGS85

Benutzer
Beiträge
23
Hallo zusammen,

ich habe folgendes Statement:

select i.name, sum(i.qty_ordered) as Anzahl, sum(i.qty_ordered * i.price) as Nettoumsatz

from sales_flat_order_item i
join sales_flat_order o on i.order_id = o.entity_id

where (o.created_at between '2014-11-03' and '2015-03-08')

and o.status not like '%holded%'
and o.status not like 'canceled'
and o.status not like '%closed%'
and (o.store_id like '50' or o.store_id like '61')

group by i.name
order by o.store_id DESC


Das statement soll mir für die Stores 50 und 60 jeweils alles skunamen gruppieren und die dazugehörige Summe über Anzahl und Umsatz geben. Das Problem ist jetzt, dass anscheinend die OR-Bedingung mit der Group By Funktion kollidiert. Für die Stores 50 und 60 werden nicht alle Zeilen aufsummiert. Wenn ich jeweils für Store 50 und 60 ein separates Statement mache ohne die OR-Bedingung kommen in Summe mehr Zeilen heraus, als wenn ich beide Stores zusammen wie in der obigen Abfrage abfrage. Das Zeilen fehlen passiert nur wenn ich die Group By Funktion. Ohne Group By gibt es keinen unterschied zwischen der Abfrage wie sie oben steht und zwei Abfragen jeweils für Store 50 und 60.

Weiß jemand woran das liegen könnte?

Vielen Dank schonmal
 
Werbung:
Hallo zusammen,

ich habe folgendes Statement:

select i.name, sum(i.qty_ordered) as Anzahl, sum(i.qty_ordered * i.price) as Nettoumsatz

from sales_flat_order_item i
join sales_flat_order o on i.order_id = o.entity_id

where (o.created_at between '2014-11-03' and '2015-03-08')

and o.status not like '%holded%'
and o.status not like 'canceled'
and o.status not like '%closed%'
and (o.store_id like '50' or o.store_id like '61')

group by i.name
order by o.store_id DESC


Das statement soll mir für die Stores 50 und 60 jeweils alles skunamen gruppieren und die dazugehörige Summe über Anzahl und Umsatz geben. Das Problem ist jetzt, dass anscheinend die OR-Bedingung mit der Group By Funktion kollidiert. Für die Stores 50 und 60 werden nicht alle Zeilen aufsummiert. Wenn ich jeweils für Store 50 und 60 ein separates Statement mache ohne die OR-Bedingung kommen in Summe mehr Zeilen heraus, als wenn ich beide Stores zusammen wie in der obigen Abfrage abfrage. Das Zeilen fehlen passiert nur wenn ich die Group By Funktion. Ohne Group By gibt es keinen unterschied zwischen der Abfrage wie sie oben steht und zwei Abfragen jeweils für Store 50 und 60.

Weiß jemand woran das liegen könnte?

Vielen Dank schonmal

Ohne die Tabellen zu kennen und die Daten kann man nur raten. Im Select vergleichst Du mit like auf '50' und '61', suchst aber für 50 und 60. Warum eigentlich sind gefühlt 80% der MySQL-User der Meinung, man müsse mit LIKE auf Gleichheit prüfen? *Kopfschüttel*
 
Weiß jemand woran das liegen könnte?
Die Wahrscheinlichkeit das es an deinem Statement liegt... ist recht hoch...

Und vollkommen ins Blaue geschossen habe ich da mal ein paar Anpassungen vorgenommen... Aber wie @akretschmer schon sagte bräuchten wir Tabellendefinitionen, um wirklich zu helfen...
Code:
Select sfo.store_id,
       sfo.name,
       Sum(sfoi.qty_ordered) As Quantity,
       Sum(sfoi.qty_ordered * sfoi.price) As val_curr
From   sales_flat_order sfo

Inner  Join sales_flat_order_item sfoi
On     sfoi.order_no = sfo.order_no

Where  sfo.created_at Between '2014-11-03' And '2015-03-08'
And    lower(sfo.status) Not In ('holded', 'canceled', 'closed')
And    sfo.store_id In ('50', '60')

Group  By sfo.store_id, sfo.name
Order  By sfo.store_id, sfo.name
 
Werbung:
Besten Dank für die hilfreichen Antworten. Ich habe nun = benutzt und die store_id mit in die GROUP-BY Klausel genommen. Jetzt funktionierts!
 
Zurück
Oben