为什么这个查询:
SELECT inv.batch_number_id AS batch_number_id,
inv.expiry_date AS expiry_date,
inv.facility_id AS facility_id,
inv.id AS id,
fac.code AS facility_code,
inv_st.description AS status,
bn.batch_nbr AS batch_number,
bn.expiry_date AS batch_expiry_date,
sum(CASE WHEN al.status_id < 90 THEN al.alloc_qty ELSE 0 END) AS alloc_qty
FROM inventory inv
INNER JOIN facility fac ON inv.facility_id = fac.id
INNER JOIN inventory_status inv_st ON inv.status_id = inv_st.id
LEFT OUTER JOIN batch_number bn ON inv.batch_number_id = bn.id
LEFT OUTER JOIN allocation al ON al.from_inventory_id = inv.id
GROUP BY inv.id,
facility_code,
status,
batch_number,
batch_expiry_date
Run Code Online (Sandbox Code Playgroud)
在postgres 9.1.6工作?
从文档:"当存在GROUP BY时,SELECT列表表达式无法引用除聚合函数之外的未分组列,因为对于未分组的列,将返回多个可能的值."
如果我添加fac.id到select表达式,我得到预期的"错误:列"fac.id"必须出现在GROUP BY子句中或用于聚合函数".为什么postgres抱怨该列而忽略了facility_id?(原始查询中还有一大堆其他列也以同样的方式违反了我的期望.为了清晰起见,缩短了示例.)