【问题标题】:Best day of the week一周中最好的一天
【发布时间】:2015-07-04 13:26:49
【问题描述】:

我有一个三列的表格

order;
orderID | ordertotal | datetime

1       | 100.00     | 2015-03-01 17:48:14
2       | 150.00     | 2015-05-10 02:33:20
3       | 5982.23    | 2015-06-11 17:11:30
...

我正在尝试查找SUMordertotals 在一周中的几天的记录。

换句话说,我想查看最好的星期一(订单总额的总和)、最好的星期二和其他。

最后,我将在一周的 7 天中得到如下结果。

 DailyTotal    | DayOfTheWeek | ActualDate

     7500      | Monday       | 2015-03-01
     8000      | Tuesday      | 2015-05-10
     5000      | Wednesday    | 2015-06-11
...

我试过这个查询,除了 ActualDate 之外它都有效;

SELECT
    MAX(o2.dailytotal) AS DailyTotal,
    DATE_FORMAT(o2.datetime2, '%W') AS DayOfTheWeek,
    o2.datetime2 AS ActualDate
FROM
    (
        SELECT
            SUM(s1.ordertotal) AS dailytotal,
            DATE(s1.datetime) AS datetime2
        FROM
            order AS o1
        GROUP BY
            DATE(o1.datetime)
    ) AS o2
GROUP BY DATE_FORMAT(o2.datetime2, '%W')
ORDER BY 1 DESC

我正在等待您的解决方案。

【问题讨论】:

    标签: mysql sql group-by sql-order-by


    【解决方案1】:

    在这种情况下,substring_index()/group_concat() 技巧可能是表达查询的最佳方式:

    SELECT MAX(o2.dailytotal) AS DailyTotal,
           DATE_FORMAT(o2.datetime2, '%W') AS DayOfTheWeek,
           SUBSTRING_INDEX(GROUP_CONCAT(o2.datetime2 ORDER BY o2.dailytotal DESC), ',', 1) AS ActualDate
    FROM (SELECT DATE(s1.datetime) AS datetime2,
                 SUM(s1.ordertotal) AS dailytotal      
          FROM `order` o1
          GROUP BY DATE(o1.datetime)
         ) o2
    GROUP BY DATE_FORMAT(o2.datetime2, '%W')
    ORDER BY DailyTotal DESC;
    

    这存在一些问题(例如将日期转换为字符串以及中间group_concat() 字符串可能不够大——可以调整)。但是,替代方案会导致更复杂的查询。

    您的版本只是返回一个不确定的日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2014-03-08
      • 2011-06-14
      • 1970-01-01
      • 2016-07-18
      相关资源
      最近更新 更多