sql查询以获取每个座位数收入最高的餐厅表

标签 sql ms-access

我有一个看起来像这样的模式:

 Tables
   table_id
   seat_count

 Orders
   order_id
   table_id
   meal_id

 Meals
   meal_id
   price

我正在尝试获得每个 seat_count 收入最高的 table ,即

 |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  

但我卡住了,它返回的记录如下:

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

(即有重复的 seat_counts)我不知道如何摆脱它。

最佳答案

我想这会给你想要的,但如果两个表的座位数和收入水平相同,它会显示两者。我在 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);

关于sql查询以获取每个座位数收入最高的餐厅表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6322456/

相关文章:

mysql - 需要按开始年份和之后的每一年分组的事实行的总和

ms-access - 在VBA中,如何与不同变量不同地处理相同错误?

mysql - 如何通过对 MySQL 表中的一个表中的项目进行分组来获取有限的行

c# - Winforms中OleDb参数查询(C#) : no errors but no rows updated

SQL:获取计数最高的完整记录

sql-server - 添加带主键的链接表的 VBA 代码

database - 在 Access 中创建一对多关系仅显示 "Indeterminate"关系类型选项

php - 更新重复记录保持1条记录不变的SQL语句

mysql - 如果第 1 行为空,如何将数据第 1 行更改为等于第 2 行?

mysql - 如何使用union解决mySQL下的全外连接问题