首页 > 解决方案 > 使用条件选择和求和选择不同的行

问题描述

我有一个 MySQL 选择,我无法让它工作。我的简化order表如下所示:

+----+------------+----------------+-------+----------------+
| id | partner_id | personal_price | price | modified_price |
+----+------------+----------------+-------+----------------+
|  1 |          1 |            500 |   900 | NULL           |
|  2 |          1 |            700 |  1100 | 1400           |
|  3 |          2 |            400 |   800 | NULL           |
+----+------------+----------------+-------+----------------+

total_price应该是modified_price如果它被设置,或者price如果不是。而且我还想按合作伙伴区分行并总结total_pricepersonal_price计算差异partner_price

结果应该是这样的:

+------------+-------------+----------------+---------------+
| partner_id | total_price | personal_price | partner_price |
+------------+-------------+----------------+---------------+
|          1 |        2300 |           1200 |          1100 |
|          2 |         800 |            400 |           400 |
+------------+-------------+----------------+---------------+

到目前为止,不起作用的代码是:

SELECT
  DISTINCT partner_id,
  SUM ( CASE WHEN price_modified IS NULL 
    THEN price 
    ELSE price_modified END ) as total_price,
  SUM ( presonal_price ),
  total_price - personal_price as parnter_price
  FROM orders

我很感激任何帮助

标签: mysql

解决方案


您需要group by partner_id并且不使用不同的:

select
  partner_id,
  sum(coalesce(modified_price, price)) total_price,
  sum(personal_price) personal_price,
  sum(coalesce(modified_price, price) - personal_price) partner_price
from orders
group by partner_id

请参阅演示
结果:

| partner_id | total_price | personal_price | partner_price |
| ---------- | ----------- | -------------- | ------------- |
| 1          | 2300        | 1200           | 1100          |
| 2          | 800         | 400            | 400           |

推荐阅读