1
我在Postgres上執行了查詢,並使用了Postgres 9.4或更高版本中提供的FILTER子句,但我被告知只能使用標準SQL子句。在Postgres上更改查詢以僅使用標準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子句更適合以標準化方式編寫查詢。 – ruselli
過濾條款***是*** SQL標準的一部分。當涉及SQL功能或SQL標準時,MySQL幾乎不是基準。如果你想要一個在Postgres **和** MySQL上運行的語句,那麼你不應該請求一個「標準的SQL」語句。 –