2011-06-12 65 views
3

最大的收入我有一個模式,它看起來像這家餐廳表:我想獲得具有每seat_count最大的收入表SQL查詢來獲取具有每seat_count

Tables 
    table_id 
    seat_count 

Orders 
    order_id 
    table_id 
    meal_id 

Meals 
    meal_id 
    price 

,即

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

我得到的是與此查詢最接近:

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 

但我卡住了,它返回記錄蘇ch爲:

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

(即我與重複的seat_counts),我不知道如何擺脫它。

+1

**哪個**數據庫和**什麼版本**? – 2011-06-12 14:25:40

+0

ms access 2k3(嘆息我知道) – murmu 2011-06-12 14:26:56

回答

2

我認爲這會給你你想要的,但如果兩張桌子有相同的座位數和收入水平,它會顯示兩者。我在Access 2003中的上述表格結構模型上試了一下(這就是爲什麼它在括號中有奇怪的連接語法的原因)。

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);