按天分组的SQL计数

按天分组的SQL计数,sql,group-by,amazon-redshift,Sql,Group By,Amazon Redshift,我感兴趣的是查看从一些示例数据中获得包所需的不同长度。我目前正在使用以下代码: SELECT COUNT(*) FROM orders_table WHERE DATEDIFF(day, order_date, delivered_date) = 2 AND order_date BETWEEN '2021-01-01' AND '2021-01-31' 我想得到不同长度的交付数量,在上面的示例中,它查看需要2天的交付数量。然而,这是相当耗时的,因为我需要在不同的天数内不断更改where语句并

我感兴趣的是查看从一些示例数据中获得包所需的不同长度。我目前正在使用以下代码:

SELECT COUNT(*)
FROM orders_table
WHERE DATEDIFF(day, order_date, delivered_date) = 2
AND order_date BETWEEN '2021-01-01' AND '2021-01-31'
我想得到不同长度的交付数量,在上面的示例中,它查看需要2天的交付数量。然而,这是相当耗时的,因为我需要在不同的天数内不断更改where语句并重新运行代码,是否有一种方法可以对它进行分组,也可以按月分组?因此,输出将如下所示:

January           February           March              April
2D   3D   4D      2D   3D   4D       2D   3D   4D      2D   3D   4D 
--------------------------------------------------------------------
12   7    32      21   53   33       8    22   41      9    44   30

这并不能以您想要的格式提供输出,但结果似乎正是您想要的。 使用DATEDIFF函数进行分组:

SELECT DATEDIFF(day, order_date, delivered_date) AS Date_Diff, COUNT(*)
FROM orders_table
WHERE order_date BETWEEN '2021-01-01' AND '2021-01-31'
GROUP BY DATEDIFF(day, order_date, delivered_date)
如果您只需要特定的datediff天(例如,如果您希望查看订单与交货日期相差仅2、3和4天的订单),则只需在筛选器中添加所需的数字:

WHERE DATEDIFF(day, order_date, delivered_date) IN (2, 3, 4)

这并不能以您想要的格式提供输出,但结果似乎正是您想要的。 使用DATEDIFF函数进行分组:

SELECT DATEDIFF(day, order_date, delivered_date) AS Date_Diff, COUNT(*)
FROM orders_table
WHERE order_date BETWEEN '2021-01-01' AND '2021-01-31'
GROUP BY DATEDIFF(day, order_date, delivered_date)
如果您只需要特定的datediff天(例如,如果您希望查看订单与交货日期相差仅2、3和4天的订单),则只需在筛选器中添加所需的数字:

WHERE DATEDIFF(day, order_date, delivered_date) IN (2, 3, 4)

你的问题包括这个月。为此:

SELECT DATE_TRUNC('month', order_date) as yyyymm
       DATEDIFF(day, order_date, delivered_date) as days_diff,
       COUNT(*)
FROM orders_table
GROUP BY DATE_TRUNC('month', order_date), DATEDIFF(day, order_date, delivered_date);
您可以使用条件聚合来透视这些结果:

SELECT DATEDIFF(day, order_date, delivered_date) as days_diff,
       SUM( (DATE_PART(month, order_date) = 1)::INT ) as jan,
       SUM( (DATE_PART(month, order_date) = 2)::INT ) as feb,
       SUM( (DATE_PART(month, order_date) = 3)::INT ) as mar,
       SUM( (DATE_PART(month, order_date) = 4)::INT ) as apr
       COUNT(*)
FROM orders_table
WHERE order_date >= '2021-01-01' AND
      order_date < '2021-05-01'
GROUP BY DATEDIFF(day, order_date, delivered_date);
选择日期差异(日期、订单日期、交货日期)作为日期差异,
金额((日期部分(月,订单日期)=1)::INT)截至1月,
总和((日期部分(月,订单日期)=2)::INT)截至2月,
金额((日期部分(月,订单日期)=3)::INT)截至3月,
金额((日期部分(月、订单日期)=4)::整数)为4月
计数(*)
从订单表
其中订单日期>='2021-01-01'和
订单日期<'2021-05-01'
按日期分组(日期、订单日期、交货日期);

您的问题包括月份。为此:

SELECT DATE_TRUNC('month', order_date) as yyyymm
       DATEDIFF(day, order_date, delivered_date) as days_diff,
       COUNT(*)
FROM orders_table
GROUP BY DATE_TRUNC('month', order_date), DATEDIFF(day, order_date, delivered_date);
您可以使用条件聚合来透视这些结果:

SELECT DATEDIFF(day, order_date, delivered_date) as days_diff,
       SUM( (DATE_PART(month, order_date) = 1)::INT ) as jan,
       SUM( (DATE_PART(month, order_date) = 2)::INT ) as feb,
       SUM( (DATE_PART(month, order_date) = 3)::INT ) as mar,
       SUM( (DATE_PART(month, order_date) = 4)::INT ) as apr
       COUNT(*)
FROM orders_table
WHERE order_date >= '2021-01-01' AND
      order_date < '2021-05-01'
GROUP BY DATEDIFF(day, order_date, delivered_date);
选择日期差异(日期、订单日期、交货日期)作为日期差异,
金额((日期部分(月,订单日期)=1)::INT)截至1月,
总和((日期部分(月,订单日期)=2)::INT)截至2月,
金额((日期部分(月,订单日期)=3)::INT)截至3月,
金额((日期部分(月、订单日期)=4)::整数)为4月
计数(*)
从订单表
其中订单日期>='2021-01-01'和
订单日期<'2021-05-01'
按日期分组(日期、订单日期、交货日期);