簡體   English   中英

SQL 客戶訂單

[英]SQL Customer Order

在此處輸入圖像描述

WITH CTE AS( SELECT u.name, count(user_id) AS "Num_Apperence",YEAR(t.created_at)
             FROM transactions t
             LEFT JOIN users u 
             ON t.user_id = u.id
             WHERE YEAR(t.created_at) = 2019
             GROUP BY u.name
             HAVING count(user_id) > 3
)
SELECT Name1
FROM (SELECT u.name AS 'Name1', count(user_id) AS "Num_Apperence",YEAR(t.created_at)
FROM transactions t
LEFT JOIN users u 
ON t.user_id = u.id
WHERE YEAR(t.created_at) = 2020
GROUP BY u.name
HAVING count(user_id) > 3) AS T
INNER JOIN CTE 
ON CTE.name = T.Name1

這樣可以成功運行,但不能通過測試用例。 我查看了兩個查詢結果,似乎找到了,我找不到問題所在

2019 & 2020 年訂單超過 3 個的客戶,output 只是名稱:

SELECT u.name
FROM (
    SELECT
          t.user_id
    FROM transactions t
    WHERE t.created_at >= '2019-01-01' AND t.created_at < '2021-01-01'
    GROUP BY t.user_id
    HAVING count(case when year(t.created_at) = 2019 then 1 end) > 3
       AND count(case when year(t.created_at) = 2020 then 1 end) > 3
    ) AS uc
LEFT JOIN users u ON uc.user_id = u.id
  1. 不必在使用group by的查詢的 select 子句中進行聚合
  2. 避免在 where 子句謂詞中使用函數以充分利用索引。 可以使用WHERE YEAR(t.created_at) IN (2019,2020)但這可能不會使用該日期列上的任何索引。
  3. 將交易過濾到所需的 2 年(2019 年和 2020 年)
  4. 通過在加入表之前執行聚合可能有助於提高性能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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