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   

私は 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

しかし、私はassum(v.value)に対応するものを選択したい。distinct o.orderIdTotal_value

望ましい結果:

ordertouserId  Orders Total_value
 1               3      500   
 2               1      500
4

2 に答える 2

0

目的の出力では、ordertouserId = 2 は、boucherId = 3 の Total_value を示しています。

申し訳ありませんが、それは答えではありませんが、質問にコメントを投稿するのに十分な「評判」がありません. ordertouserId = 2 に対して (Total_value = 300 ではなく) Total_value = 500 をどのように選択したかをよりよく理解すると、私の答えは次のようになります。

ordertouserId = 2 の場合に Total_value を計算する際に使用するバウチャー ID を決定する明確な方法がないため、希望する出力を取得することはできません。

ところで、ordertouserId = 2 と Total_value = 1000 を示す最初の出力テーブルにエラーがあると思います。ordertouserId = 2 の TotalValue は 300 + 500 = 800 ではないでしょうか?

于 2013-08-23T06:51:30.817 に答える
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 | バウチャー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 に答える