MySQL GROUP BY 和 SELECT GROUP BY [重复]
Posted
技术标签:
【中文标题】MySQL GROUP BY 和 SELECT GROUP BY [重复]【英文标题】:MySQL GROUP BY and SELECT GROUP BY [duplicate] 【发布时间】:2013-12-07 01:05:39 【问题描述】:这是我的桌子
产品:
订单
这是我的查询:
SELECT DISTINCT
orders.*,
IF (orders.price_type = 1, products.price * orders.quantity, products.discount_price * orders.quantity) AS subtotal
FROM
orders
LEFT JOIN
products
ON
orders.product_id = products.id
GROUP BY
order_id
结果:
如果您注意到小计,则仅根据所选行进行计算。如何添加具有相同order_id
的其他行的结果?
【问题讨论】:
【参考方案1】:我还没有测试过这个,但我认为这就是你要找的。p>
SELECT DISTINCT
orders.*,
sum(IF (orders.price_type = 1, products.price * orders.quantity, products.discount_price * orders.quantity)) AS subtotal
FROM
orders
LEFT JOIN
products
ON
orders.product_id = products.id
GROUP BY
order_id
【讨论】:
我不确定这个解决方案。它仍然返回相同数量的行,但它肯定会给出每个 order_id 的总数,但其余列仅与一个订单行相关。但如果它被接受了,我还能说别的吗【参考方案2】:既然你说你想要小计,我假设你只想计算订单表每一行的值。为此,您必须删除DISTINCT
和GROUP BY
。 (DISTINCT
和 GROUP BY
一起做这样的事情有点奇怪,如果你希望每一行都与小计一起返回,你不需要它们):
SELECT orders.*,
IF(orders.price_type = 1,
products.price * orders.quantity,
products.discount_price * orders.quantity) AS subtotal
FROM orders
LEFT JOIN products ON orders.product_id = products.id
这将为您提供订单表中每一行的小计。
如果你想要GROUPED BY order_id
的结果,你真的不能这样做SELECT *
,因为 GROUP BY 会对其他列做出错误的假设,最终你会得到错误的结果,就像你所经历的那样。你可以这样做:
SELECT orders.order_id,
orders.order_date,
SUM(IF(orders.price_type = 1,
products.price * orders.quantity,
products.discount_price * orders.quantity)) AS subtotal
FROM orders
LEFT JOIN products ON orders.product_id = products.id
GROUP BY orders.order_id, orders.order_date
【讨论】:
以上是关于MySQL GROUP BY 和 SELECT GROUP BY [重复]的主要内容,如果未能解决你的问题,请参考以下文章
MySQL SELECT 从多个表,多个 GROUP BY 和 group_concat?
MySQL:是不是可以将 GROUP-BY 的结果加入到两个 SELECT 中?
mysql 用 group by 和 order by同时使用