如何在单独的列中获取 SQL 中分组列的总体摘要?
How to get overall summary of grouped columns in SQL in a separate column?
我有一个分组查询,它看起来像我从以下查询中得到的:
SELECT
name,
warehouse,
COUNT(distinct orders) total_orders,
AVG(late_ship_flag) pct_late_ship,
SUM(units) sum_units,
FROM table1
GROUP BY
name,
warehouse
结果如下:
+----------+-----------+--------------+---------------+-----------+
| name | warehouse | total_orders | pct_late_ship | sum_units |
+----------+-----------+--------------+---------------+-----------+
| company1 | 1 | 2 | 0 | 5244 |
+----------+-----------+--------------+---------------+-----------+
| company1 | 2 | 19 | 0.125 | 138264 |
+----------+-----------+--------------+---------------+-----------+
| company1 | 3 | 21 | 0.08952519 | 102681 |
+----------+-----------+--------------+---------------+-----------+
| company1 | 4 | 23 | 0.118733509 | 45456 |
+----------+-----------+--------------+---------------+-----------+
| company1 | 5 | 12 | 0.077922078 | 18396 |
+----------+-----------+--------------+---------------+-----------+
我衡量绩效的方式是仓库延迟发货的次数百分比,因此我希望有一个列显示公司级别的每个仓库的平均百分比。如何在单个查询中获得以下输出?关于如何做到这一点,我唯一的想法是用公司的平均值临时 table 并将其加入上面的分组输出。
理想输出:
+----------+-----------+--------------+---------------+-----------+------------------+
| name | warehouse | total_orders | pct_late_ship | sum_units | average_pct_late |
+----------+-----------+--------------+---------------+-----------+------------------+
| company1 | 1 | 2 | 0 | 5244 | .10287 |
+----------+-----------+--------------+---------------+-----------+------------------+
| company1 | 2 | 19 | 0.125 | 138264 | .10287 |
+----------+-----------+--------------+---------------+-----------+------------------+
| company1 | 3 | 21 | 0.08952519 | 102681 | .10287 |
+----------+-----------+--------------+---------------+-----------+------------------+
| company1 | 4 | 23 | 0.118733509 | 45456 | .10287 |
+----------+-----------+--------------+---------------+-----------+------------------+
| company1 | 5 | 12 | 0.077922078 | 18396 | .10287 |
+----------+-----------+--------------+---------------+-----------+------------------+
如果你想要所有仓库的平均百分比,那么你可以使用:
AVG(AVG(late_ship_flag)) OVER (PARTITION BY name) as overall_pct_late_ship
如果您不想要平均值的平均值,您的下一个选择是从其组成部分计算平均值...AVG(late_ship_flag) = SUM(late_ship_flag) / COUNT(late_ship_flag)
在现有 GROUP BY
上使用 window 函数,那将是...
SUM(SUM( late_ship_flag)) OVER (PARTITION BY name) * 1.0
/
SUM(COUNT(late_ship_flag)) OVER (PARTITION BY name)
我有一个分组查询,它看起来像我从以下查询中得到的:
SELECT
name,
warehouse,
COUNT(distinct orders) total_orders,
AVG(late_ship_flag) pct_late_ship,
SUM(units) sum_units,
FROM table1
GROUP BY
name,
warehouse
结果如下:
+----------+-----------+--------------+---------------+-----------+
| name | warehouse | total_orders | pct_late_ship | sum_units |
+----------+-----------+--------------+---------------+-----------+
| company1 | 1 | 2 | 0 | 5244 |
+----------+-----------+--------------+---------------+-----------+
| company1 | 2 | 19 | 0.125 | 138264 |
+----------+-----------+--------------+---------------+-----------+
| company1 | 3 | 21 | 0.08952519 | 102681 |
+----------+-----------+--------------+---------------+-----------+
| company1 | 4 | 23 | 0.118733509 | 45456 |
+----------+-----------+--------------+---------------+-----------+
| company1 | 5 | 12 | 0.077922078 | 18396 |
+----------+-----------+--------------+---------------+-----------+
我衡量绩效的方式是仓库延迟发货的次数百分比,因此我希望有一个列显示公司级别的每个仓库的平均百分比。如何在单个查询中获得以下输出?关于如何做到这一点,我唯一的想法是用公司的平均值临时 table 并将其加入上面的分组输出。
理想输出:
+----------+-----------+--------------+---------------+-----------+------------------+
| name | warehouse | total_orders | pct_late_ship | sum_units | average_pct_late |
+----------+-----------+--------------+---------------+-----------+------------------+
| company1 | 1 | 2 | 0 | 5244 | .10287 |
+----------+-----------+--------------+---------------+-----------+------------------+
| company1 | 2 | 19 | 0.125 | 138264 | .10287 |
+----------+-----------+--------------+---------------+-----------+------------------+
| company1 | 3 | 21 | 0.08952519 | 102681 | .10287 |
+----------+-----------+--------------+---------------+-----------+------------------+
| company1 | 4 | 23 | 0.118733509 | 45456 | .10287 |
+----------+-----------+--------------+---------------+-----------+------------------+
| company1 | 5 | 12 | 0.077922078 | 18396 | .10287 |
+----------+-----------+--------------+---------------+-----------+------------------+
如果你想要所有仓库的平均百分比,那么你可以使用:
AVG(AVG(late_ship_flag)) OVER (PARTITION BY name) as overall_pct_late_ship
如果您不想要平均值的平均值,您的下一个选择是从其组成部分计算平均值...AVG(late_ship_flag) = SUM(late_ship_flag) / COUNT(late_ship_flag)
在现有 GROUP BY
上使用 window 函数,那将是...
SUM(SUM( late_ship_flag)) OVER (PARTITION BY name) * 1.0
/
SUM(COUNT(late_ship_flag)) OVER (PARTITION BY name)