3 回答

TA貢獻(xiàn)1898條經(jīng)驗 獲得超8個贊
MySQL的完全非標(biāo)準(zhǔn)兼容性GROUP BY可以由Postgres模仿DISTINCT ON??紤]一下:
MySQL的:
SELECT a,b,c,d,e FROM table GROUP BY a
每個值提供1行a(哪一個,你真的不知道)。實際上你可以猜到,因為MySQL不知道哈希聚合,所以它可能會使用排序......但它只會排序a,所以行的順序可能是隨機的。除非它使用多列索引而不是排序。好吧,無論如何,它沒有被查詢指定。
Postgres的:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
這樣每個值傳送1行a,該行將根據(jù)ORDER BY查詢指定的排序中的第一行。簡單。
請注意,這里,它不是我正在計算的聚合。所以GROUP BY實際上毫無意義。DISTINCT ON更有意義。
Rails與MySQL結(jié)合,所以我并不驚訝它生成的SQL在Postgres中不起作用。

TA貢獻(xiàn)1891條經(jīng)驗 獲得超3個贊
PostgreSQL比MySQL更符合SQL。輸出中的所有字段(除了具有聚合函數(shù)的計算字段)必須存在于GROUP BY子句中。

TA貢獻(xiàn)1829條經(jīng)驗 獲得超9個贊
MySQL的GROUP BY可以在沒有聚合函數(shù)的情況下使用(這與SQL標(biāo)準(zhǔn)相反),并且返回組中的第一行(我不知道基于什么標(biāo)準(zhǔn)),而PostgreSQL必須具有聚合函數(shù)(MAX,發(fā)布GROUP BY子句的列上的SUM等)。
添加回答
舉報