2016-10-14 117 views
0

我有一張銷售表,我想在最近3個月內獲得每個會員最常購物的商店。以下查詢將獲得每個商店的每個成員,但我只需要每個成員一個商店。MySQL選擇頂行按行分組

SELECT member_id, store_id, COUNT(DISTINCT docket) as docket_count, SUM(dollar_amount) as dollars 
FROM sales 
WHERE TIMESTAMPDIFF(MONTH, sale_date, CURDATE()) < 3 
GROUP BY member_id, store_id 
ORDER BY member_id, docket_count DESC, dollars DESC 

或者讓高層商店單個成員

SELECT store_id, COUNT(DISTINCT docket) as docket_count, SUM(dollar_amount) as dollars 
FROM sales 
WHERE TIMESTAMPDIFF(MONTH, sale_date, CURDATE()) < 3 
AND member_id = 1 
GROUP BY store_id 
ORDER BY docket_count DESC, dollars DESC 

回答

1

這是棘手。在MySQL中,這可以使用group_concat()/substring_index()絕招:

SELECT member_id, 
     SUBSTRING_INDEX(GROUP_CONCAT(store_id ORDER BY docket_count DESC dollars DESC), ',', 1) as Most_Common_Store 
FROM (SELECT member_id, store_id, COUNT(DISTINCT docket) as docket_count, 
      SUM(dollar_amount) as dollars 
     FROM sales 
     WHERE sale_date >= CURDATE() - interval 3 month 
     GROUP BY member_id, store_id 
    ) ms 
GROUP BY member_id;