【发布时间】:2020-12-23 16:35:20
【问题描述】:
例如,我有一个带有分类列的订单表。我想获取特定日期的某个州每个城市的每个分类的总数。
我已经完成了以下工作。
SELECT
state.id AS state_id,
state.name AS state_name,
city.id AS city_id,
city.name AS city_name,
count(*) AS total,
count(CASE WHEN o.classification = 'A' THEN 1 END) AS total_A,
count(CASE WHEN o.classification = 'B' THEN 1 END) AS total_B,
FROM orders AS o
LEFT JOIN city ON o.city_id = city.id
LEFT JOIN state ON city.state_id = state.id
WHERE o.category = 'CATEGORY'
AND o.city_id IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
AND (o.trn_date::date = '2020-05-07')
GROUP BY state.id, state.name, city.id, city.name
ORDER BY state.name, city.name;
问题是我并不总是得到 in 子句中指定的相同数量 (16) 的城市。
即使某些记录全部为零,我如何才能始终获得 16 条记录
【问题讨论】:
-
请edit您的问题(通过点击下面的edit链接)并添加一些示例数据和基于该数据的预期输出为formatted text .请参阅here,了解有关如何创建漂亮的文本表格的一些提示。 (edit 您的问题 - 在 cmets 中不邮政编码或其他信息)
标签: sql postgresql join count aggregate-functions