【发布时间】:2015-01-08 12:17:47
【问题描述】:
我有三张桌子。我正在尝试查询我的PRICE_LIST 表,并计算每个价目表中有价格的 SKU 数量,以及分配给每个价目表的客户数量。
表格
我的PRICE_LIST 表:
price_list_id
price_number
name
此表有 41 行。
我的SKU_PRICE 表:
sku_id
price_number
此表有 1,132 行。
我的CUSTOMER 表:
customer_id
price_number
customer_type
is_active
此表有 6,535 行,但我只想要“E”类型的活跃客户,因此我想要的行数减少到 2,961。
查询
我的查询:
SELECT
pl.price_list_id,
pl.price_number,
pl.name,
count(sp.sku_id) "sku_count",
count(c.customer_id) "customer_count"
FROM price_list pl
LEFT JOIN sku_price sp ON (sp.price_number = pl.price_number)
LEFT JOIN customer c ON (c.price_number = pl.price_number)
WHERE c.customer_type = 'E' AND c.is_active = 'T'
GROUP BY pl.price_list_id, pl.price_number, pl.name;
问题
我的问题是结果太疯狂了:
price_list_id | price_number | name | sku_count | customer_count
---------------+--------------+-------+-----------+----------------
31 | 4 | SF0 | 0 | 792
33 | 6 | SF2 | 30525 | 30525
2 | 2 | ASNP2 | 972 | 972
1 | 1 | ASNP1 | 1596 | 1596
34 | 7 | SF3 | 616 | 616
37 | 10 | SF6 | 0 | 51
32 | 5 | SF1 | 1144 | 1144
我的 SKU 计数和客户计数的计数均为 30,525,这一事实告诉我,加入正在做一些奇怪的事情。我也不明白为什么我没有得到没有产品和客户的价目表(而且有很多这样的)。
如果我只将PRICE_LIST 加入到一张桌子上——SKU_PRICE 或CUSTOMER——我会得到合理的结果。只有当我尝试同时做这两件事时,它才会失败。
如果有人能将我推向正确的方向,我将不胜感激。
FWIW,我在 OS X 上使用 PostgreSQL 9.3.5。
【问题讨论】:
标签: postgresql join