0
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.orderIdas Total_value

期望的结果:

ordertouserId  Orders Total_value
 1               3      500   
 2               1      500
4

2 回答 2

0

根据您对我的其他答案的评论中的建议,我创建了表格并运行了查询。这就是我所拥有的(它与您在问题中的输出不同)。顺便说一句,您发布的查询也没有按照提供的方式工作,列名中混合了驼峰式 Id 和 _id。

我创建了表并运行了查询。结果如下:

mysql> select * from vouchers;
    +-----------+-------+------------+
    | 凭证ID | 价值 | 余额|
    +-----------+-------+------------+
    | 1 | 100 | 20 |
    | 2 | 300 | 120 |
    | 3 | 500 | 220 |
    +-----------+-------+------------+
    3 行一组(0.00 秒)
mysql> select * from orders;
    +---------+-----------+----------------+
    | 订单号 | 凭证ID | ordertouserId |
    +---------+-----------+----------------+
    | 1 | 1 | 1 |
    | 2 | 3 | 2 |
    | 3 | 2 | 1 |
    | 4 | 1 | 1 |
    | 2 | 2 | 2 |
    +---------+-----------+----------------+
    5 行一组(0.00 秒)
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 | 订单 | 总价值 |
    +---------------+--------+-------------+
    | 1 | 3 | 500 |
    | 2 | 2 | 800 |
    +---------------+--------+-------------+
于 2013-08-23T07:43:22.043 回答
0

在您想要的输出中,ordertouserId = 2 显示凭证 ID = 3 的 Total_value。您如何确定不想显示凭证 ID = 2 的 Total_value?

抱歉,这不是答案,但我没有足够的“声誉”来对此问题发表评论。更好地理解您如何为 ordertouserId = 2 选择 Total_value = 500(而不是 Total_value = 300),我的答案必须是:

无法获得您想要的输出,因为没有明确的方法可以确定在计算 Total_value 时应使用哪个凭证Id,其中 ordertouserId = 2。

顺便说一句,我认为第一个输出表中有一个错误,它显示 ordertouserId = 2 且 Total_value = 1000。ordertouserId = 2 的 TotalValue 不应该是 300 + 500 = 800 吗?

于 2013-08-23T06:51:30.817 回答