【问题标题】:group by date from date column in yyyy-mm-dd format从日期列中按日期分组,格式为 yyyy-mm-dd
【发布时间】:2022-01-31 01:29:54
【问题描述】:

我有一个包含这些列的表:order_id、order_status、order_date、order_quantity、sales、discount_value、product_category、product_sub_category

订单日期为 yyyy - dd - mm 格式。我想查询,以便结果在这样的表中: (https://i.ibb.co/cFh4h4K/Capture2.png)

我尝试了下面的公式,但它却给了我很多行,基于这样的年份 (https://i.ibb.co/fDcjpks/Capture2.png)。

SELECT 
LEFT(order_date, 4) as years, 
SUM(order_quantity*sales)-SUM(order_quantity*discount_value) AS sales, 
SUM(order_quantity) AS number_of_order 
FROM dqlab_sales_store
WHERE order_status = 'order finished' 
GROUP BY order_date,order_quantity,discount_value;

有什么帮助吗?谢谢

【问题讨论】:

  • 请添加您使用的 DBMS 的标签,并提供表定义为create table 语句。日期没有任何格式(无论您如何显示,某个特定日期在时间线上都是相同的)。您需要使用to_char/cast/format 将日期格式化为字符串,具体取决于您使用的dbms

标签: sql date group-by


【解决方案1】:

如果你想按年份分组,试试用这个怎么样?

按年份分组

这是因为您将 yyyy 保存为年份,因此列名将是年份而不是 order_date。 希望我的回答能解决你的问题。

【讨论】:

    【解决方案2】:

    这是你要找的吗?

    SELECT 
    LEFT(order_date, 4) as years, 
    SUM(order_quantity*sales)-SUM(order_quantity*discount_value) AS sales, 
    SUM(order_quantity) AS number_of_order 
    FROM dqlab_sales_store
    WHERE order_status = 'order finished' 
    GROUP BY LEFT(order_date, 4);
    

    【讨论】:

    • 就是这个,我刚刚意识到我不需要将所有内容都添加到 group by 子句中。谢谢
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多