3 回答

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

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

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