如何解决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,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,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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。