sql lekérdezést kap éttermi asztalok, amelyek a legnagyobb jutó jövedelem seat_count

szavazat
3

Van egy séma, hogy néz ki, mint ez:

 Tables
   table_id
   seat_count

 Orders
   order_id
   table_id
   meal_id

 Meals
   meal_id
   price

Én próbálok táblázatok, amelyek a legnagyobb jutó jövedelem seat_count, azaz

 |idTable| |income| |seat_count|
     2        50$        5
     3        60$        4
     4        40$        3
     10       80$        2

A legközelebb kaptam a lekérdezés:

 SELECT tables.table_id, 
       SUM(income), 
       tables.seat_count 
FROM   (SELECT tables.table_id, 
               tables.seat_count, 
               COUNT(orders.meal_id) * meals.price AS income 
        FROM   meals 
               INNER JOIN (tables 
                           INNER JOIN orders 
                             ON tables.table_id = orders.table_id) 
                 ON meals.meal_id = orders.meal_id 
        GROUP  BY tables.table_id, 
                  tables.seat_count, 
                  meals.price 
        ORDER  BY COUNT(orders.meal_id) * meals.price DESC) 
GROUP  BY tables.table_id, 
          tables.seat_count 
ORDER  BY SUM(income) DESC  

De én elakad, akkor visszatér feljegyzések, például:

 table_id, income, seat_count
   1         40$     5
   2         30$     5
   4         20$     4

(Azaz ismétlődő seat_counts), és fogalmam sincs, hogyan lehet megszabadulni tőle.

A kérdést 12/06/2011 13:23
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
2

Azt hiszem, ez ad, amit akar, de ha két asztal van egyforma ülés számát és jövedelmi szint, akkor megmutatja mindkettő. Kipróbáltam egy makett a tábla szerkezete a fenti Access 2003 (ezért is van a különös csatlakozzon szintaxis a zárójelben).

select sub1.table_id, sub1.seat_count, sub1.income
from
(
    SELECT Tables.table_id, Tables.seat_count, Sum(Meals.price) AS Income
    FROM (Tables INNER JOIN Orders ON Tables.table_id = Orders.table_id) INNER JOIN Meals ON Orders.meal_id = Meals.meal_id
    GROUP BY Tables.table_id, Tables.seat_count
) sub1
inner join 
(
    select seat_count, max(Income) as Maxincome
    from
    (
        SELECT Tables.table_id, Tables.seat_count, Sum(Meals.price) AS Income
        FROM (Tables INNER JOIN Orders ON Tables.table_id = Orders.table_id) INNER JOIN Meals ON Orders.meal_id = Meals.meal_id
        GROUP BY Tables.table_id, Tables.seat_count
    ) sub
    group by seat_count
) sub2 on (sub1.seat_count = sub2.seat_count and sub1.income = sub2.maxincome);
Válaszolt 12/06/2011 13:58
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more