【发布时间】:2018-06-06 16:10:18
【问题描述】:
我在 MySQL 中遇到了 WITH ROLLUP 的一个奇怪问题,我无法理解。我有一个餐厅订单数据库,根据查询的组合方式,它在底部给出了不同的总数。
以下查询计算正确,并使用SUM(m.price*od.qty)。
SELECT m.item_name, m.price, SUM(od.qty), COUNT(*), SUM(m.price*od.qty)
FROM order_main AS om, order_detail AS od, menu as m
WHERE od.menuid=m.menuid AND om.orderid=od.orderid AND om.order_date='2012-11-16' AND m.menuid<10
GROUP BY m.menuid WITH ROLLUP;
+-------------------+-------+-------------+----------+---------------------+
| item_name | price | SUM(od.qty) | COUNT(*) | SUM(m.price*od.qty) |
+-------------------+-------+-------------+----------+---------------------+
| Cheese Sticks | 8.74 | 31 | 11 | 270.94 |
| Pepper Pasta | 1.63 | 55 | 18 | 89.65 |
| Sambuca Puree | 2.84 | 68 | 22 | 193.12 |
| Beef Tenderloin | 2.52 | 48 | 16 | 120.96 |
| Pork Chops | 5.37 | 53 | 18 | 284.61 |
| Sole Nole | 2.13 | 65 | 18 | 138.45 |
| Nescafe Espresso | 9.96 | 56 | 21 | 557.76 |
| Lettuce Wraps | 8.35 | 57 | 21 | 475.95 |
| Bread with Butter | 9.36 | 55 | 19 | 514.80 |
| WITH ROLLUP | ---- | 488 | 164 | 2646.24 |
+-------------------+-------+-------------+----------+---------------------+
以下查询使用m.price*SUM(od.qty) 计算的汇总不正确。但其他一切都在表格中。
SELECT m.item_name, m.price, SUM(od.qty), COUNT(*), m.price*SUM(od.qty)
FROM order_main AS om, order_detail AS od, menu as m
WHERE od.menuid=m.menuid AND om.orderid=od.orderid AND om.order_date='2012-11-16' AND m.menuid<10
GROUP BY m.menuid WITH ROLLUP;
+-------------------+-------+-------------+----------+---------------------+
| item_name | price | SUM(od.qty) | COUNT(*) | m.price*SUM(od.qty) |
+-------------------+-------+-------------+----------+---------------------+
| Cheese Sticks | 8.74 | 31 | 11 | 270.94 |
| Pepper Pasta | 1.63 | 55 | 18 | 89.65 |
| Sambuca Puree | 2.84 | 68 | 22 | 193.12 |
| Beef Tenderloin | 2.52 | 48 | 16 | 120.96 |
| Pork Chops | 5.37 | 53 | 18 | 284.61 |
| Sole Nole | 2.13 | 65 | 18 | 138.45 |
| Nescafe Espresso | 9.96 | 56 | 21 | 557.76 |
| Lettuce Wraps | 8.35 | 57 | 21 | 475.95 |
| Bread with Butter | 9.36 | 55 | 19 | 514.80 |
| WITH ROLLUP | ---- | 488 | 164 | 4567.68 |
+-------------------+-------+-------------+----------+---------------------+
我找不到任何关于 WITH ROLLUP 计算方式不同的原因,尤其是因为每件商品的价格都是静态的。
【问题讨论】:
-
这两个查询是相同的。 “基于查询的组合方式”是什么意思?
-
您需要 WITH ROLLUP 吗? - 我从来没有真正找到它的用途。
-
@Barmar 抱歉,我复制粘贴有点匆忙。现在更新了。