我需要一个查询(最好是ANSI投诉或者至少可以使用mysql),它会产生以下结果:
+---------+-----------+---------+------------+
| Name | Order_1 | Order_2 | Total |
+---------+-----------+---------+------------+
| User 1 | 18.00 | 0.00 | 18.00 |
| User 2 | 8.00 | 20.00 | 28.00 |
| User 3 | 20.00 | 0.00 | 20.00 |
+---------+-----------+---------+------------+
其中order_1是具有标志1的订单总和,order_2是具有标志2的订单总和。以下是表格:
Orders:
+---------+---------+------------+
| id | cost | user_id |
+---------+---------+------------+
| 1 | 8.00 | 1 |
| 2 | 10.00 | 1 |
| 3 | 8.00 | 2 |
| 4 | 20.00 | 2 |
| 5 | 20.00 | 3 |
+---------+-----------+----------+
Users:
+---------+-----------+
| id | name |
+---------+-----------+
| 1 | User 1 |
| 2 | User 2 |
| 3 | User 3 |
+---------+-----------+
Order_flags:
+---------+-----------+
| order_id| flag |
+---------+-----------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
+---------+-----------+
答案 0 :(得分:2)
您可以使用条件聚合执行此操作:
SELECT u.name,
SUM(CASE WHEN of.flag = 1 THEN cost ELSE 0 END) Order_1,
SUM(CASE WHEN of.flag = 2 THEN cost ELSE 0 END) Order_2,
SUM(cost) Total
FROM Users u
JOIN Orders o ON u.id = o.user_id
JOIN Order_flags of ON of.order_id = o.id
GROUP BY u.id, u.name
答案 1 :(得分:0)
你可以使用和案例
select
u.name
, sum( case f.flag = 1 then o.cost else 0 end ) as Order_1
, sum( case f.flag = 2 then o.cost else 0 end ) as Order_2
, sum(o.cost)
from Users as u
inner join Orders as o on o.user_id = u.id
inner join Order_flags as f on o.id = f.order_id
group by u.name