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 Eben Hotel Budapest
27 Veritas
28 Ibis Budapest Heroes Square
29 Hunguest Hotel Griff
托马斯30号酒店
31 NH Budapest
31鲁宾健康和会议酒店
32 Benczur酒店
33大西洋
33 Delibab Hotel Budapest
与GROUP BY完全相同的结果注释掉:
24 Gerand Hotel Ventura
25 Hunguest Hotel Platanus
26 Boulevard City Guesthouse
26 Tulip Inn Millennium Budapest
26 Eben Hotel Budapest
27 Veritas
27巴罗斯
28托马斯酒店
28 Hunguest Hotel Griff
28 Ibis Budapest Heroes Square
基本上我想按名称进行GROUP,但保留ORDER BY。由于24小于26,我有点期望它早于26出现。另外请记住,我只显示前10个结果,以保持帖子简短。
我正在使用:SELECT VERSION() - > 5.1.37
答案 0 :(得分:2)
您在group by
上使用p.name
,但选择该字段和另一个字段;你为什么在这里使用group by
?真的有必要吗?
引用MySQL手册的SELECT
页面:
MySQL将GROUP BY的使用扩展到 允许选择不是的字段 在GROUP BY子句中提到。如果 你没有得到结果 请期待您的查询 阅读找到的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
列的某处添加聚合函数可能会有所帮助,我会说。
答案 1 :(得分:0)
添加HAVING MIN(p.price)
。
答案 2 :(得分:0)
Group By子句主要用于需要带有一些聚合函数的结果,如(sum,avg等)
另一件事是您需要在结果集中选择要分组的列。
答案 3 :(得分:0)
如果其他人可能会为此而挣扎:
添加SELECT MIN(p.price) AS price
,然后ORDER BY price
。这将为您提供所需的结果。