【问题标题】:mysql group by multiplemysql 按多个分组
【发布时间】:2016-03-22 10:14:42
【问题描述】:

我不确定这是否专门按问题分组,因为我已尝试按多列对其进行分组。基本问题是这样的表格:

我想获取不同国家/地区的订单总价格总和,但按 order_id 分组。所以对于法国来说,total_price 的总和应该是 8000,因为其中两行是针对同一订单的。我的 sql 显然是错误的,因为我没有得到这个。

SELECT sum(total_price) as total_price_per_country
FROM cars
WHERE (country IN ('France'))
group by order_id, country;

【问题讨论】:

  • order_id 不是唯一的。前两行具有相同的 order_id

标签: mysql sql select group-by


【解决方案1】:

不,GROUP BY 不会让你明白这一点。如果您GROUP BYcountry,则每个国家/地区获得一排。

没有第二次查询就无法做到这一点,所以它必须是这样的:

SELECT *, (SELECT SUM(total_price) FROM cars AS c2 WHERE c2.country = cars.country) AS total_price_per_country
FROM cars

INNER JOIN 到表的第二个副本也可以。)

【讨论】:

    【解决方案2】:
    select sum(total_price) from cars where country = 'France' group by order_id
    

    试试上面的查询

    【讨论】:

    • 仅按来自法国的订单分组。返回一个包含 6000、2000 和 3000 的表
    • 是的,因此将记录与 order_id 1、4 和 5 分组。这就是你想要的,对吧??对于 order_id 1,您有两条记录,每个记录的 total_price 为 3000。那是 6000。order_id 4 是 2000,order_id 5 是 3000。
    • 不,在 OP 中提到,我希望退回 8000。这是法国独特订单总价的总和。这些行是订单各个部分的细分。前两行顺序相同。 3000 是重复的总金额
    • select max(order_id),sum(total_price) from (select order_id from cars where country = 'France') group by order_id
    • 试试select sum(part_price) from cars where country = 'France'
    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 2010-10-15
    • 2014-11-05
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多