2010-01-13 102 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。这会给你想要的结果。