依照日期時間和總和,對MySQL進行排名
P粉322319601
P粉322319601 2023-09-01 08:49:20
0
1
564
<p>我有一個儲存購買記錄的資料庫:</p> <pre class="brush:php;toolbar:false;">| user_id | product | price | datetime | ----------------------------------------- | 1 | 1 | -0.75 | 2022-01-01 | | 2 | 1 | -0.75 | 2022-01-01 | | 3 | 2 | -0.65 | 2022-01-01 | | 2 | 1 | -0.75 | 2022-01-01 | | 1 | 1 | -0.75 | 2022-01-02 | | 1 | 3 | -1.50 | 2022-01-02 | | 1 | 2 | -0.65 | 2022-01-02 | | 2 | 1 | -0.75 | 2022-01-02 | | 3 | 2 | -0.65 | 2022-01-02 | | 3 | 3 | -1.50 | 2022-01-02 | | 3 | 3 | -1.50 | 2022-01-02 |</pre> <p>N.B. 時間在這個問題中不重要。 </p> <p>我想要的是每天每個用戶的排名,例如用戶1的情況如下:</p> <pre class="brush:php;toolbar:false;">| datetime | product1 | product2 | product3 | total | ranking | -------------------------------------------------- ------------------ | 2022-01-01 | 1 | 0 | 0 | 0.75 | 2 | | 2022-01-02 | 1 | 1 | 1 | 2.90 | 2 |</pre> <p>請注意,排名是針對每天計算的。 </p> <p>下面的查詢給了表格的一部分:</p> <pre class="lang-sql prettyprint-override"><code>SELECT DATE(`datetime`) AS datetime, SUM(CASE WHEN product = 1 THEN 1 ELSE 0 END) AS product1, SUM(CASE WHEN product = 2 THEN 1 ELSE 0 END) AS product2, SUM(CASE WHEN product = 3 THEN 1 ELSE 0 END) AS product3, SUM(CASE WHEN product = 1 THEN 0.75 ELSE 0 END) SUM(CASE WHEN product = 2 THEN 0.65 ELSE 0 END) SUM(CASE WHEN product = 3 THEN 1.5 ELSE 0 END) as total, FROM `history` WHERE user_id=1 GROUP BY DATE(`datetime`) </code></pre> <p>我的問題與這個問題非常相似:MySQL ranking,但我無法完全按照我的要求得到結果。只能對每天的所有用戶進行排名。如果我添加給定的排名功能,它將查看表格並將2022-01-02作為第一名(因為2.90比0.75更高)。如何讓排名針對每天進行? </p>
P粉322319601
P粉322319601

全部回覆(1)
P粉707235568

問題並不完全清楚。然而,我認為你在問的是如何按天對所有用戶的購買進行排名:

history_date user_id DailyTotal totalRank
2022-01-01 2 1.50 1
2022-01-01 1 0.75 2
2022-01-01 3 0.65 3
2022-01-02 3 3.65 1
2022-01-02 1 2.90 2
2022-01-02 2 0.75 3
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板