簡體   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