2013-08-23 34 views
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 

但我想選擇對應於distinct o.orderIdTotal_valuesum(v.value)

所需的結果:

ordertouserId Orders Total_value 
1    3  500 
2    1  500 

回答

0

在您需要的輸出,在ordertouserId = 2顯示Total_value爲voucherId = 3,你怎麼確定你不想顯示Total_value爲voucherId = 2?

對不起,這不是一個答案,但我沒有足夠的「聲譽」發表評論的問題。爲了更好地理解你爲ordertouserId = 2選擇Total_value = 500(而不是Total_value = 300)的方式,我的答案必須是:

你所期望的輸出是不可能獲得的,因爲沒有明確的方法確定哪些voucherId應該在計算Total_value其中ordertouserId = 2

順便說一句,我認爲有在第一輸出表的錯誤表示ordertouserId = 2與Total_value = 1000應該不是總價值爲ordertouserId = 2被使用是300 + 500 = 800?

+0

我不想顯示voucherid = 2 total_value因爲DESE兩個訂單ID是一樣的。所以我想要第一個訂單的total_value。 –

+0

沒有任何錯誤,它會使憑證ID爲2的兩倍,即500 + 500即1000.請嘗試創建上面的表並運行查詢。 –

+0

如果您需要_first_訂單的總價值,訂單如何確定?它是基於哪一行首先出現在數據中? (這可能是一個稍微脆弱的方法,因爲業務邏輯計算理想情況下應該產生相同的結果,而不管數據在表中如何排序)。 – Loedolff

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 | 
    +---------------+--------+-------------+ 
相關問題