繁体   English   中英

选择一个列的值,该值对应于另一列的不同值

[英]Select one value of column, corresponding with distinct value of other column

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

但是我想选择与distinct o.orderId对应的sum(v.value)作为Total_value

所需结果:

ordertouserId  Orders Total_value
 1               3      500   
 2               1      500

在所需的输出中,ordertouserId = 2显示voucherId = 3的Total_value。如何确定不希望显示voucherId = 2的Total_value?

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

无法获得所需的输出,因为没有明确的方法来确定在ordertouserId = 2的情况下在计算Total_value时应使用哪个voucherId。

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

根据您对其他答案的评论建议,我创建了表并运行了查询。 这就是我所拥有的(它与您在问题中得到的输出不同)。 顺便说一句,您发布的查询也无法按提供的方式工作,列名中混合使用了驼峰式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 |
    +---------------+--------+-------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM