0

次のようなSQLテーブルがあります:

id    buy_product      buy_product_total     sell_product     sell_product_total
 1     apple                   5                  
 2     banana                  8
 3     cake                   20
 4                                                apple               1
 5                                                cake                2
 6     apple                   2

私の問題は、製品名と残りの製品数を表示したいということです。お気に入り :

product_name         left
     apple            6
     cake            18

SQLクエリでそのソリューションのように表示するにはどうすればよいですか?

次のように回答者としてテーブルを作成します。

テーブルを購入

  id     product_name     total
   1       apple            5
   2       banana           8
   3       cake            20
   4       apple            2

テーブルを売る

   id      product_name     total
    1        apple            1
    2        cake             2

こんなテーブルにしたい

   product_name            left
     apple                   6
     banana                  8
     cake                   18
4

3 に答える 3

1

良いテーブルではありません。買いと売りが同じ列になるように、正の値で買い、負の値で売る方が良いかもしれません。

しかし、あなたの質問に答えてください。あなたのテーブル名が myTable、obs であると仮定してください。

select buy_product as product_name, (buy_total - sell_total) as left
from (
  (select buy_product, sum(buy_product_total) as buy_total 
    from myTable where buy_product_total is not null group by buy_product) as buy_list
  inner join
  (select sell_product, sum(sell_product_total) as sell_total 
    from myTable where sell_product_total is not null group by sell_product) as sell_list
  on buy_list.buy_product = sell_list.sell_product
)
于 2013-10-18T00:13:55.770 に答える
0

より適切な別のデータベース設計を検討する必要があります (正規化について読みたい場合があります) が、クエリは次のようになります。

SELECT t1.buy_product_total - t2.sell_product_total
FROM ProductTable t1, ProductTable t2
WHERE t1.buy_product = t2.sell_product

つまり、「自己結合」を使用してテーブルをそれ自体に結合しています...

于 2013-10-17T23:58:34.583 に答える