[英]MYSQL GROUP BY and ORDER BY not working together as expected
我將嘗試用兩種情況解釋我的問題:
我的要求是只獲得每個酒店的單一記錄沒有重復,而第二個訂單應該是最低的酒店價格應該在TOP;
我的意思是記錄我需要記錄,將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;
請注意,我在上面的上下文中僅使用了id = 364
來顯示結果,但是還有許多其他重復的酒店ID,有這種情況,所以我需要一個通用查詢,它不僅適用於id = 364
還適用於其他ID這樣我就可以通過一個查詢獲得完整的結果。
MySQL將允許這些類型的愚蠢查詢,其中假定GROUP BY
包含所有列,即使您沒有指定它們。 首先進行分組,因此如果只有一個結果,則排序不會執行任何操作。
您需要使用MIN(third_party_rate)
來獲取該列的最低值。
在SQL中,在完成訂購之后首先完成分組。
所以在這種情況下,您可以先order
您的記錄。 將結果與您的特定列分組,它將返回給定記錄,無論您想要什么。 你可以用你的查詢。 替換您的查詢,如下所示:
例如
select * from
(select * from table_name order by column_name Asc)
as t group by t.column_name_for_group
您認為我的查詢可以幫助您實現記錄:
Select * from (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
ORDER BY hwd.double_spl_rate,hwd.third_party_rate ASC) as result_table GROUP BY result_table.id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.