2010-01-13 228 views
0
 SELECT 
      p.price, 
      h.name AS hotel_name 
     FROM 
      prices p 
      LEFT JOIN hotels h ON p.hotel_id = h.id 
     WHERE 
      p.city = 'boedapest' 
      AND p.hotel_id IS NOT NULL 
     GROUP BY p.name  
     ORDER BY p.price ASC 

結果:
26埃本酒店布達佩斯
27個船級社
28宜必思布達佩斯英雄廣場
29特色:Hunguest Hotel Griff酒店
30酒店托馬斯
31 NH布達佩斯
31魯賓健康會議酒店
32本庫茲酒店
33大西洋
33 Delibab酒店布達佩斯奇怪的MySQL GROUP BY/ORDER BY行爲

完全一樣與GROUP BY結果註釋:
24 Gerand Hotel Ventura酒店
25特色:Hunguest酒店懸鈴木
26大道城市賓館
26的Tulip Inn千年布達佩斯
26埃本酒店布達佩斯
27個船級社
27巴洛斯
28酒店托馬斯
28酒店特色:Hunguest格里夫
28宜必思布達佩斯英雄廣場

基本上我想按名稱組,但保留ORDER BY。由於24小於26,我預計它會在26之前出現。請記住,我只顯示前10個結果,以保持帖子的簡短。

我使用的是:SELECT VERSION() - > 5.1.37

+1

如果你沒有使用任何聚合函數,你爲什麼使用'GROUP BY'? – 2010-01-13 05:40:48

+0

所以我可以GROUP_CONCAT價格。例如: GROUP_CONCAT(CONCAT(transport,'||',price,'||',p.url)SEPARATOR'(|)')AS價格 爲了簡單起見,我省略了GROUP_CONCAT。 – 2010-01-13 05:50:29

回答

0

添加HAVING MIN(p.price)

+0

不起作用。它改變了幾行,但不是在開始。 – 2010-01-13 05:49:29

+0

您的問題顯示您按p.name分組。你是不是想用h.name來組合呢? – 2010-01-13 05:50:43

+0

名稱相同。我知道它看起來很糟糕的設計。但價格表中的名稱僅用於獲取價格。 – 2010-01-13 05:53:19

2

您在p.name上使用group by,但選擇該字段和另一個;爲什麼你在這裏使用group by?它真的有必要嗎?


引述SELECT頁面MySQL手冊的:

的MySQL擴展了到 允許選擇不在GROUP BY子句中提到 領域使用GROUP的。如果 你沒有得到那個 你從你的查詢所期望的結果,請 閱讀GROUP BY的說明發現 第11.12, 「Functions and Modifiers for Use with GROUP BY Clauses」.


而閱讀11.12.3. GROUP BY and HAVING with Hidden Columns可能幫助:

當使用此功能,每個組中 中的所有行都應具有相同的值 ,以用於GROUP BY部分中從 中省略的列。服務器是免費的 返回組中的任何值,所以 的結果是不確定的,除非 所有值都是相同的。

基本上,在p.price列的某處添加聚合函數可能會有所幫助,我想說。

+0

更準確地說,我是GROUPING來爲分頁添加一個GROUP_CONCAT和一個LIMIT + OFFSET。爲了簡單起見,我刪除了不必要的代碼。但的確,最好理解一下問題。 – 2010-01-13 05:55:21

0

Group By子句當你需要與像一些聚合函數(SUM,AVG等)

另一件事是,你需要在你想成爲組結果集中選擇列結果大多使用。

0

萬一別人可能在這個鬥爭:

添加SELECT MIN(p.price) AS price然後ORDER BY price。這會給你想要的結果。