SQLクエリに問題があります。 私は何時間も試してみましたが、インターネットを検索しましたが、私が必要なものを見つけることはできません。SQLクエリ - CASEから新しい定義済みの値を数える
私はプライマリキーと外部キーとしてIDで接続された2つのテーブルを持っています。 2番目のテーブルの値はすべて特定のカテゴリを持ちます。 2番目のテーブルの各値は、異なるカテゴリにしかありません。 これをクエリ内で新しいカテゴリにソートする必要があります。複数の値が同じカテゴリを持つ可能性があります。 希望する出力は、0を含むそれぞれのカウントを持つこれらの新しいカテゴリのリストです。
サブテーブルなどとは異なる結合を試しましたが、望みの結果を得られませんでした。
meals:
| id | name | food_id |
+----+------+---------+
| 01 | Pete | 001 |
| 02 | Anna | 002 |
| 03 | Jim | 003 |
| 04 | John | 002 |
| 05 | Lucy | 003 |
food:
| id | name |
+-----+--------+
| 001 | Apple |
| 002 | Banana |
| 003 | Carrot |
| 004 | Steak |
マイクエリ:
SELECT food.foodtype AS foodtype,
COUNT(food.foodtype) AS amount
FROM (
SELECT food.id AS id
CASE WHEN food.name = 'Apple' THEN 'Fruit',
WHEN food.name = 'Banana' THEN 'Fruit',
WHEN food.name = 'Carrot' THEN 'Vegetable',
WHEN food.name = 'Steak' THEN 'Meat',
END AS foodtype
FROM food
) AS food
INNER JOIN meals
ON meals.food_id = food.id
GROUP BY food.foodtype
(私はそれが理解できる願っています)
私のテーブル
は、残念ながら私はあなたにexcactテーブル/クエリを表示することができない私は、問題を再現してみました
このクエリの結果は、すべてのフードタイプが使用されているテーブルですが、未使用のフードタイプも0として表示する必要があります。
| foodtype | amount |
+-----------+--------+
| Fruit | 3 |
| Vegetable | 2 |
私が必要とする結果:私が持っていたもう一つのアイデア
| foodtype | amount |
+-----------+--------+
| Fruit | 3 |
| Vegetable | 2 |
| Steak | 0 |
、それでも私は必要となりません。
SELECT CASE WHEN food.name = 'Apple' THEN 'Fruit',
WHEN food.name = 'Banana' THEN 'Fruit',
WHEN food.name = 'Carrot' THEN 'Vegetable',
WHEN food.name = 'Steak' THEN 'Meat',
END AS foodtype
COUNT(meals.id) AS amount
FROM meals
RIGHT JOIN food
ON food.id = meals.food_id
GROUP BY food.name
マイ結果:
| foodtype | amount |
+-----------+--------+
| Fruit | 1 |
| Fruit | 2 |
| Vegetable | 2 |
| Meat | 0 |
私はそれが理解できる願っています何が必要なのか、誰かがこの問題で私を助けることができます。
ある
このアプローチを使用する - 私はあなたがあなたのfoodtypeたり、食べ物に基づいてカウントするかどうかを疑問に思いを。名? –
正規化については、結合チェーンを構築できるように、food_typeテーブル(foodの親)が必要です。 –