2011-06-12 64 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);