2つのテーブルがあります。複数の列で選択/グループ化しますが、1つの列の値を数えます
表#1:受注
order_id | crit_1 | crit_2 | crit_3 | other
01 | A00 | GER | 49er | x
02 | A00 | GER | 49er | x
03 | A00 | USA | 49er | x
04 | C80 | DEN | 66er | x
05 | B50 | GER | 99er | x
テーブルorders
は、3つの重要な基準を持っていますが、criterion_4
を持っていません。 order_positions
のテーブルがあり、order_id
ごとに複数のcriterion_4
エントリが含まれています。
表#2:私は上classifications.class_1
に参加するクエリを持って
orders = class_1 = combination of crit_1, crit_2 & crit_3
order_positions = class_2 = combination of crit_1, crit_2, crit_3 & crit_4
:分類
crit_1 | crit_2 | crit_3 | crit_4 | class_1 | class_2
A00 | GER | 49er | 4711 | A | 11
A00 | GER | 49er | 4712 | A | 21
A00 | USA | 49er | 4711 | D | 12
A00 | USA | 49er | 4712 | D | 21
B50 | GER | 99er | 4801 | B | 12
B50 | GER | 99er | 4802 | B | 12
B50 | GER | 99er | 4803 | B | 14
C80 | DEN | 66er | 4904 | C | 22
C80 | DEN | 66er | 4905 | C | 21
テーブルclassifications
はのための分類が含まれていますタorders
を入力してorders
とそれぞれのclassification
のリストを作成します。
select
orders.order_id,
orders.crit_1,
orders.crit_2,
orders.crit_3,
classifications.class_1
from
orders
left join
classifications
on
orders.crit_1=classifications.crit_1 and
orders.crit_2=classifications.crit_2 and
orders.crit_3=classifications.crit_3
where
orders.others = "..."
group by
orders.order_id,
orders.crit_1,
orders.crit_2,
orders.crit_3,
classifications.class_1
テーブル分類がcrit_1
、crit_2
とcrit_3
の組み合わせで複数のエントリを含んでいるので、私は終わりにGROUP BYを必要とします。しかし、これは問題ではない。なぜなら、必要とされるclassification_1
は、crit_1, crit_2
とcrit_3
の各組み合わせに対して常に同じであるからである。
ここでは、注文ごとにそれぞれclassification_1
の数を数える別のクエリを作成します。このような何か:
class_1 | number
A | 12
B | 5
C | 18
. | .
しかし、私は知らないどのようにorders.order_id、orders.crit_1
、orders.crit_2
、orders.crit_3
と私は上記のクエリのためのclass_1
分類をカウントするclassifications.class_1
の全部選択なし。
提案がありますか?
編集
Kaushikによるナーヤカによって提案されたように私はそれを試してみました:
select
--orders.order_id,
--orders.crit_1,
--orders.crit_2,
--orders.crit_3,
classifications.class_1,
count(*)
from
orders
left join
classifications
on
orders.crit_1=classifications.crit_1 and
orders.crit_2=classifications.crit_2 and
orders.crit_3=classifications.crit_3
where
orders.others = "..."
group by
--orders.order_id,
--orders.crit_1,
--orders.crit_2,
--orders.crit_3,
classifications.class_1
をしかし、結果が正しくないと、私はこれらの数字を再現する方法が分かりません。
いくつかの例:
| class_1 | query w/ | query w/o | query |
| | group by | group by | count(*) |
---------------------------------------------
| A | 654 | 2179 | 1024 |
| B | 371 | 1940 | 667 |
| C | 94 | 238 | 247 |
私はgroup by
と私のクエリを使用すると、私はgroup by
せずに私のクエリを作るとき、私は= A. class_1
のための654のエントリを取得し、その後、私はclass_1
= Aの2179個のエントリを取得します Count(*)
でクエリを実行すると、class_1
= Aの1024エントリが得られます。
最後の1つは間違いです。
簡単 'SELECT c.class_1、 COUNT(*) O注文FROMは、分類がGROUP BY c.class_1' ...上のC JOIN。それは働いていないのですか? –
悲しいことに、うまくいきませんでした。私はあなたに私の問題を示すために私の質問を編集しました。 – Apo