Ergebnis 1 bis 3 von 3

Thema: sortierung nach errechneten werten aus selber tabelle

  1. #1
    emanymton ist offline Neuer Benutzer
    Registriert seit
    14.09.2011
    Beiträge
    15

    Standard sortierung nach errechneten werten aus selber tabelle

    echo $Begrüssung,

    liebe Leute, folgendes wäre mein Problem:

    Mir steht eine Tabelle zur Verfügung, die grob zusammengefasst so aussieht:

    tbl_Orders
    id (int nextval)
    datum (timestamp)
    restaurant_id (integer)


    (jedes restaurant legt hier seine bestellungen ab)

    meine aufgabe wäre es, folgende zeilen auszulesen:
    die 10 (restaurant_id) 's , die (januar zu februar am meisten % wachstum hatten)

    quasi
    order by
    count(*) an der stelle to_char(datum,'YYYY MM') ='2011 01'
    /
    count(*) an der stelle to_char(datum,'YYYY MM')='2011 02'

    ich brings leider einfach nicht zusammen....
    leider bin ich in pgsql nicht so sattelfest, und nach 6h herumpfuschen mit rank() und
    irgendwelchen unterselects bin ich keinen schritt näher...
    hilfe?

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von emanymton Beitrag anzeigen
    echo $Begrüssung,

    liebe Leute, folgendes wäre mein Problem:

    Mir steht eine Tabelle zur Verfügung, die grob zusammengefasst so aussieht:

    tbl_Orders
    id (int nextval)
    datum (timestamp)
    restaurant_id (integer)


    (jedes restaurant legt hier seine bestellungen ab)

    meine aufgabe wäre es, folgende zeilen auszulesen:
    die 10 (restaurant_id) 's , die (januar zu februar am meisten % wachstum hatten)

    quasi
    order by
    count(*) an der stelle to_char(datum,'YYYY MM') ='2011 01'
    /
    count(*) an der stelle to_char(datum,'YYYY MM')='2011 02'

    ich brings leider einfach nicht zusammen....
    leider bin ich in pgsql nicht so sattelfest, und nach 6h herumpfuschen mit rank() und
    irgendwelchen unterselects bin ich keinen schritt näher...
    hilfe?
    So?

    Code:
    test=# select * from orders;
     id |   datum    | restaurant
    ----+------------+------------
      1 | 2011-01-01 |          1
      2 | 2011-01-02 |          1
      3 | 2011-01-03 |          1
      4 | 2011-01-04 |          1
      5 | 2011-01-05 |          2
      6 | 2011-01-06 |          2
      7 | 2011-01-07 |          2
      8 | 2011-01-08 |          3
      9 | 2011-02-08 |          1
     10 | 2011-02-09 |          1
     11 | 2011-02-10 |          1
     12 | 2011-02-11 |          2
     13 | 2011-02-11 |          3
    (13 rows)
    
    test=# select * from (select sum(case when extract(month from datum) = 1 then 1 else 0 end) as januar, sum(case when extract(month from datum) = 2 then 1 else 0 end) as februar, restaurant from orders group by restaurant order by restaurant) foo order by februar - januar limit 2;
     januar | februar | restaurant
    --------+---------+------------
          3 |       1 |          2
          4 |       3 |          1
    (2 rows)
    Ginge sicher noch eleganter...

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    emanymton ist offline Neuer Benutzer
    Registriert seit
    14.09.2011
    Beiträge
    15

    Standard

    absolut perfekt!
    Meine Lösung wäre sonst zwangsweise gewesen, alle Sätze auszulesen, die Prozente zu errechnen, und nur die richtigen auszugeben.
    Das hier ist wesentlich schneller und führt direkt ans Ziel!

    Endgültiger Code, ergibt Steigerung in Prozent :

    Code:
    select * from 
    (select 
    sum(case when extract(month from datum) = 1 and extract(year from datum) = 2011 then 1 else 0 end) as januar, 
    sum(case when extract(month from datum) = 2 and extract(year from datum) = 2011 then 1 else 0 end) as februar, 
    restaurant_id from orders group by restaurant_id order by restaurant_id) foo order by januar / NULLIF(februar,0) limit 10
    vielen Dank! dank dir war mein Arbeitstag nicht umsonst!
    Geändert von emanymton (14.09.2011 um 16:54 Uhr)

Ähnliche Themen

  1. Antworten: 15
    Letzter Beitrag: 26.08.2011, 10:44
  2. Update einer Tabelle nach Join
    Von Reptil im Forum SQL
    Antworten: 2
    Letzter Beitrag: 10.08.2011, 08:48
  3. Frage Sortierung nach Liste
    Von traxanos im Forum SQL
    Antworten: 10
    Letzter Beitrag: 14.07.2010, 07:05
  4. Frage Ein unique constraint auf Tabelle mit Null-Werten
    Von BlubberWolf im Forum SQL
    Antworten: 16
    Letzter Beitrag: 18.06.2009, 16:05
  5. Sortierung nach wichtigkeit der Produktsprache
    Von alexander_ro im Forum Allgemeines
    Antworten: 7
    Letzter Beitrag: 26.08.2007, 12:23

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum