voucherId value balance
1 100 20
2 300 120
3 500 220
orderId voucherId ordertouserId
1 1 1
2 3 2
3 2 1
4 1 1
2 2 2
我有两张桌子券和订单。我想
select sum(value)
from vouchers with distinct orderid
group by ordertouserId
我不确定我该怎么做。
此查询:
select o.ordertouserId, count(o.order_id) as Orders, sum(v.value) as Total_value
from vouchers v
join orders o on o.voucher_id = v.voucher_id
group by o.ordertouserId
给出结果:
ordertouserId Orders Total_value
1 3 500
2 2 1000
但我想选择与sum(v.value)
对应的distinct o.orderId
作为Total_value
。
期望的结果:
ordertouserId Orders Total_value
1 3 500
2 1 500
答案 0 :(得分:0)
在您想要的输出中,ordertouserId = 2显示了voucherId = 3的Total_value。您是如何确定不想显示voucherId = 2的Total_value的?
对不起,这不是答案,但我没有足够的“声誉”来发表评论。为了更好地理解你如何为ordertouserId = 2选择Total_value = 500(而不是Total_value = 300),我的答案必须是:
您无法获得所需的输出,因为没有明确的方法可以确定在计算Total_value时应使用哪个voucherId,其中ordertouserId = 2。
BTW,我认为第一个输出表中有一个错误,显示ordertouserId = 2且Total_value = 1000. ordertouserId = 2的TotalValue不应该是300 + 500 = 800?
答案 1 :(得分:0)
根据我对其他答案的评论中的建议,我创建了表并运行了查询。这就是我所拥有的(它与你在问题中的输出不同)。顺便说一句,您发布的查询也没有按照提供的方式工作,列名称中有驼峰案例Id和_id的混合。
我创建了表并运行了查询。结果如下:
mysql> select * from vouchers;
+-----------+-------+---------+ | voucherId | value | balance | +-----------+-------+---------+ | 1 | 100 | 20 | | 2 | 300 | 120 | | 3 | 500 | 220 | +-----------+-------+---------+ 3 rows in set (0.00 sec)
mysql> select * from orders;
+---------+-----------+---------------+ | orderId | voucherId | ordertouserId | +---------+-----------+---------------+ | 1 | 1 | 1 | | 2 | 3 | 2 | | 3 | 2 | 1 | | 4 | 1 | 1 | | 2 | 2 | 2 | +---------+-----------+---------------+ 5 rows in set (0.00 sec)
mysql> select o.ordertouserId, count(o.orderId) as Orders, sum(v.value) as Total_value from vouchers v join orders o on o.voucherId=v.voucherId group by o.ordertouserId
+---------------+--------+-------------+ | ordertouserId | Orders | Total_value | +---------------+--------+-------------+ | 1 | 3 | 500 | | 2 | 2 | 800 | +---------------+--------+-------------+