Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

OR Klausel bei Group By

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von HRGS85, 24 März 2015.

  1. HRGS85

    HRGS85 Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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*
     
  3. Distrilec

    Distrilec Datenbank-Guru

    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
     
  4. HRGS85

    HRGS85 Benutzer

    Besten Dank für die hilfreichen Antworten. Ich habe nun = benutzt und die store_id mit in die GROUP-BY Klausel genommen. Jetzt funktionierts!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden