搜索

首页  >  问答  >  正文

按照日期时间和总和,对MySQL进行排名

<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粉322319601P粉322319601454 天前549

全部回复(1)我来回复

  • P粉707235568

    P粉7072355682023-09-02 00:07:31

    问题并不完全清楚。然而,我认为你在问的是如何按天对所有用户的购买进行排名:

    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

    回复
    0
  • 取消回复