MYSQL GROUP BY 和 ORDER BY 未按预期协同工作

ash*_*ech 4 mysql

我将尝试用两个案例来解释我的问题:

  1. 当我在查询中仅使用 ORDER BY 子句时:请参阅第一张图片。

    我已经评论了此图中的 GROUP By 子句,输出就在查询下方

  2. 当我同时使用 GROUP BY 和 ORDER BY 子句时:参见第二张图片

    在此输入图像描述

我的要求是每个酒店只得到一条记录,不能重复,第二个顺序应该是最低的酒店价格应该在最上面;

third_party_rate我的意思是记录我需要将拉为 的记录1041

您可以查看文本格式的MySQL代码,如下所示:

SELECT h.hotel_id AS id,h.hotel_city AS city,h.hotel_name AS hotelname,h.hotel_star AS hotelcat,hwd.double_spl_rate, hwd.extra_bed_spl_rate,hwd.meal_plan_spl,hwd.third_party_rate,hwd.third_party_extra_bed, hwd.third_party_meal_plan,hwd.room_category,hrd.hotel_rate_from,hrd.hotel_rate_to FROM hotels_list AS h 
INNER JOIN hotel_rate_detail AS hrd ON h.hotel_id = hrd.hotels_id 
INNER JOIN hotel_week_days AS hwd ON hrd.hotel_id = hwd.h_id 
WHERE ( ('2015-07-02' BETWEEN hrd.hotel_rate_from AND hrd.hotel_rate_to) OR ('2015-07-03' BETWEEN hrd.hotel_rate_from AND hrd.hotel_rate_to) ) AND (h.hotel_city = '1')
AND (hwd.double_spl_rate != 0 OR hwd.third_party_rate != 0) AND (h.hotel_star <= '2') 
AND h.hotel_id = 364
GROUP BY h.hotel_id ORDER BY hwd.double_spl_rate,hwd.third_party_rate ASC;
Run Code Online (Sandbox Code Playgroud)

请注意,我仅在上述上下文中使用,id = 364只是为了显示结果,但还有许多其他重复的酒店 id 具有这种情况,因此我需要一个通用查询,它不仅适用于id = 364其他 id,也适用于其他 id,以便我获得完整的结果通过一个查询。

Sam*_*nen 8

MySQL 将允许此类愚蠢的查询,其中GROUP BY假设包含所有列,即使您没有指定它们。首先进行分组,因此如果只有一个结果,则排序不会执行任何操作。

您需要使用MIN(third_party_rate)来获取该列的最低值。