私は2つのテーブルを持っておりCLIENSTS
、毎年PRICES
、アイテムタイプごとの合計価格を計算するためにそれらを結合したいと考えています。
私のクエリは、すべてのアイテムの値を合計し、それらをタイプ別にグループ化し、それらをクライアントテーブルの対応するアイテムのタイプの量と掛け合わせる必要があります。選択した年のアイテムがない場合は空の値も表示されます。
ここに私のテーブル:
CLIENTS
| name | item_A | item_B | item_C |
| X | 10 | 10 | 10 |
| Y | 5 | 15 | 0 |
| Z | 0 | 0 | 20 |
PRICES
| item | item_type | year | value |
| a1 | A | 2010 | 1 |
| a2 | A | 2010 | 2 |
| b1 | B | 2010 | 2 |
| b2 | B | 2010 | 3 |
| c1 | C | 2010 | 3 |
| a1 | A | 2011 | 4 |
| b1 | B | 2011 | 5 |
選択した年ごとに連続した結果を実行できるクエリを探しています。
2010
| name | price_A | price_B | price_C |
| X | 30 | 60 | 30 |
| Y | 15 | 90 | 0 |
| Z | 0 | 0 | 60 |
2011
| name | price_A | price_B | price_C |
| X | 40 | 50 | none/null/zero |
| Y | 20 | 75 | none/null/zero |
| Z | 0 | 0 | none/null/zero |
これは私の試みですが、残念ながら、最初の年 (2010 年) は正しく実行され、2 年目 (2011 年) は行が返されません。
2年目で結果が出ていない3度目の入社が原因だと思いますtotal_C
。
mySQL に「結果が存在する場合」にテーブルに参加するように要求する正しい方法と、値を「none/null/zero」として配置する正しい方法はどれですか?
SELECT
`name`,
`item_A` * `total_A`.`total_value` AS `price_A`,
`item_B` * `total_B`.`total_value` AS `price_B`,
`item_C` * `total_C`.`total_value` AS `price_C`
FROM `CLIENTS`
JOIN
(
SELECT
`item_type`,
SUM(`value`) AS `total_value`
FROM `PRICES`
WHERE `item_type`='A' AND `year` LIKE '2010'
GROUP BY `item_type`
) AS `total_A`
JOIN
(
SELECT
`item_type`,
SUM(`value`) AS `total_value`
FROM `PRICES`
WHERE `item_type`='B' AND `year` LIKE '2010'
GROUP BY `item_type`
) AS `total_B`
JOIN
(
SELECT
`item_type`,
SUM(`value`) AS `total_value`
FROM `PRICES`
WHERE `item_type`='C' AND `year` LIKE '2010'
GROUP BY `item_type`
) AS `total_C`