SQL 按天数分组
SQL Count group by days
我有兴趣查看从一些示例数据中获取包裹所需的不同长度。我目前正在使用此代码:
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)
您的问题包括月份。为此:
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);
我有兴趣查看从一些示例数据中获取包裹所需的不同长度。我目前正在使用此代码:
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)
您的问题包括月份。为此:
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);