【发布时间】:2023-03-28 22:41:01
【问题描述】:
我对 Postgres 进行了查询,并使用了 Postgres 9.4 或更高版本中可用的 FILTER 子句,但我被告知我只能使用标准 SQL 子句。
我的查询是关于计算已屠宰的动物数量,将显示每个企业和动物类型的屠宰动物数量:
Enterprise(id or name) || cow || sheep || chicken
MacDonals || 5 || 5 || 1
Burguer King || 7 || 4 || 2
KFC || 1 || 0 || 10
所以我在 POSTGRES 9.4 上进行了本机查询:
SELECT e.name
,COALESCE (COUNT(a.id) FILTER (WHERE a.type='cow'))
,COALESCE (COUNT(a.id) FILTER (WHERE a.type='sheep'))
,COALESCE (COUNT(a.id) FILTER (WHERE a.type='chicken'))
FROM enterprise e
INNER JOIN animal_enterprise ae
ON ( ae.enterprise_id = e.id)
INNER JOIN animal a
ON ( ae.animal_id=a.id )
GROUP BY e.id
所以,我尝试对每种动物进行子查询,但效果并不理想。
【问题讨论】:
-
那已经是标准的SQL了
-
我也是这么想的,但是 Filter 子句是 postgres 9.4 或更高版本中的一个较新功能,它在 mysql 中的等价物无法存在或以相同的方式执行。那么,Case 子句更适合以标准化的方式编写查询。
-
过滤子句 is 是 SQL 标准的一部分。在 SQL 特性或 SQL 标准方面,MySQL 几乎不是基准。如果您想要在 Postgres 和 MySQL 上运行的语句,那么您不应该请求“仅标准 SQL”语句。
-
谢谢,你说的很清楚。
标签: sql postgresql ansi-sql