第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PostgreSQL GROUP BY與MySQL不同?

PostgreSQL GROUP BY與MySQL不同?

慕娘9325324 2019-08-31 16:33:14
我一直在將一些MySQL查詢遷移到PostgreSQL以使用Heroku。我的大多數(shù)查詢工作正常,但當(dāng)我使用group by時,我仍然遇到類似的重復(fù)錯誤:錯誤:列“XYZ”必須出現(xiàn)在GROUP BY子句中或用于聚合函數(shù)有人能告訴我我做錯了什么嗎?MySQL 100%工作:SELECT `availables`.*FROM `availables`INNER JOIN `rooms` ON `rooms`.id = `availables`.room_idWHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')GROUP BY availables.bookdateORDER BY availables.updated_atPostgreSQL錯誤:ActiveRecord :: StatementInvalid:PGError:錯誤:列“availables.id”必須出現(xiàn)在GROUP BY子句中或用于聚合函數(shù):SELECT“availables”。* FROM“availables”INNER JOIN“rooms”O(jiān)N“rooms”。 id =“availables”.room_id WHERE(rooms.hotel_id = 5056 AND availables.bookdate BETWEEN E'2009-10-21'EN'E'2009-10-23')GROUP BY availables.bookdate ORDER BY availables.updated_at生成SQL的Ruby代碼:expiration = Available.find(:all,    :joins => [ :room ],    :conditions => [ "rooms.hotel_id = ? AND availables.bookdate BETWEEN ? AND ?", hostel_id, date.to_s, (date+days-1).to_s ],    :group => 'availables.bookdate',    :order => 'availables.updated_at')  預(yù)期輸出(來自MySQL查詢):+ ----- + ------- ------- + ------------ + + --------- + ---- ----------- + --------------- +| id | 價格| 斑點| bookdate | room_id | created_at | updated_at |+ ----- + ------- ------- + ------------ + + --------- + ---- ----------- + --------------- +| 414 | 38.0 | 1 | 2009-11-22 | 1762年| 2009-11-20 ...... | 2009-11-20 ...... || 415 | 38.0 | 1 | 2009-11-23 | 1762年| 2009-11-20 ...... | 2009-11-20 ...... || 416 | 38.0 | 2 | 2009-11-24 | 1762年| 2009-11-20 ...... | 2009-11-20 ...... |+ ----- + ------- ------- + ------------ + + --------- + ---- ----------- + --------------- +集合3行
查看完整描述

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中不起作用。


查看完整回答
反對 回復(fù) 2019-08-31
?
萬千封印

TA貢獻(xiàn)1891條經(jīng)驗 獲得超3個贊

PostgreSQL比MySQL更符合SQL。輸出中的所有字段(除了具有聚合函數(shù)的計算字段)必須存在于GROUP BY子句中。


查看完整回答
反對 回復(fù) 2019-08-31
?
PIPIONE

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等)。


查看完整回答
反對 回復(fù) 2019-08-31
  • 3 回答
  • 0 關(guān)注
  • 1992 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號