簡體   English   中英

MYSQL GROUP BY和ORDER BY未按預期一起工作

[英]MYSQL GROUP BY and ORDER BY not working together as expected

我將嘗試用兩種情況解釋我的問題:

  1. 當我在查詢中僅使用ORDER BY子句時:請參閱第1張圖像。

    我在此圖像中注釋了GROUP By子句,輸出正好在查詢下方

  2. 當我使用GROUP BY和ORDER BY claluse時:見第2張圖片

    在此輸入圖像描述

我的要求是只獲得每個酒店的單一記錄沒有重復,而第二個訂單應該是最低的酒店價格應該在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM