我有2张桌子。
表#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
的表格,其中包含每个criterion_4
的多个order_id
条目。
表#2:分类
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 = class_1 = combination of crit_1, crit_2 & crit_3
order_positions = class_2 = combination of crit_1, crit_2, crit_3
& crit_4
我有一个查询,我在表classifications.class_1
加入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
我最后需要一个GROUP BY,因为表格分类包含多个条目,其中包含crit_1
,crit_2
和crit_3
的组合。但这不是一个问题,因为classification_1
和crit_1, crit_2
的每个组合所需的crit_3
始终相同。
现在我想创建另一个查询,其中我只计算订单的每个classification_1
的数量。像这样:
class_1 | number
A | 12
B | 5
C | 18
. | .
但如果没有完整的订单选择,我就不知道怎么做。订单,orders.crit_1
,orders.crit_2
,orders.crit_3
和classifications.class_1
我只想计算上述查询的class_1
分类。
有什么建议吗?
修改的
我试过像Kaushik Nayak建议的那样:
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
的查询时,我得到class_1
= A的654个条目。
当我在没有group by
的情况下进行查询时,我获得了class_1
= A的2179个条目。
当我使用Count(*)
尝试查询时,我会获得class_1
= A
最后一个绝对不正确。
答案 0 :(得分:0)
只需对GROUP BY
表使用classifications
class_1,然后添加EXISTS
条件以检查是否有订单。
SELECT
c.class_1,
COUNT(c.class_1) "number"
FROM
classifications c
WHERE
EXISTS (
SELECT
1
FROM
orders o
WHERE
o.crit_1 = c.crit_1
AND o.crit_2 = c.crit_2
AND o.crit_3 = c.crit_3
)
GROUP BY
c.class_1
ORDER BY
1;