Sql 如何在不中断/划分字段的情况下生成多个聚合函数
是否可以在不中断/划分分组字段的情况下生成聚合函数?我进行了一次查询,但在第一个字段中它将被划分为重复值,以下是我的查询:Sql 如何在不中断/划分字段的情况下生成多个聚合函数,sql,sql-server,tsql,Sql,Sql Server,Tsql,是否可以在不中断/划分分组字段的情况下生成聚合函数?我进行了一次查询,但在第一个字段中它将被划分为重复值,以下是我的查询: SELECT TOP 5 empname AS 'EMP Name', SUM (CASE WHEN prod = 'P' THEN 1 ELSE 0 END) AS 'Count of Prod', COUNT (prod) AS 'Total Account', FORMAT (C
SELECT TOP 5 empname AS 'EMP Name',
SUM (CASE WHEN prod = 'P' THEN 1 ELSE 0 END) AS 'Count of Prod',
COUNT (prod) AS 'Total Account',
FORMAT (COALESCE (SUM (CASE WHEN prod = 'P' THEN 1 ELSE 0 END) / COUNT (prod), 0), 'P') AS '% Prod',
DATEDIFF(DAY, t_start, t_end) as 'Duration Trip'
FROM Sampletable
WHERE empname NOT IN ('NA') AND
empname IS NOT NULL AND
t_end IS NOT NULL
GROUP BY empname,
prod,
t_end,
t_start
ORDER BY [Count of Prod] DESC
我的预期结果:
Emp。名称
产品数量
总帐
%刺激
持续行程
环境管理计划1
62
63
98,41%
30
环境管理计划2
45
48
93,75%
28
环境管理计划3
20
22
90,91%
25
环境管理计划4
20
24
83,33%
22
环境管理计划5
15
19
78,95%
20
如果您希望每个
empname
有一行,那么这应该是组by
中唯一的一列(或者是描述每个员工的其他列,但不乘以行数)
这就意味着:
SELECT TOP 5 empname,
SUM(CASE WHEN prod = 'P' THEN 1 ELSE 0 END) AS prod_count,
COUNT prod) AS Total_Account,
FORMAT(AVG(CASE WHEN prod = 'P' THEN 1.0 ELSE 0 END), '%P') AS prod_ratio,
SUM(DATEDIFF(DAY, t_start, t_end)) as trip_duration
FROM Sampletable
WHERE empname NOT IN ('NA') AND
empname IS NOT NULL AND
t_end IS NOT NULL
GROUP BY empname
ORDER BY prod_count DESC;
请注意对查询的一些更改:
- 列别名已简化,因此不需要转义字符
只有分组依据
empname
- 使用
简化产品比例逻辑AVG()
- 我假设行程持续时间应该是各个持续时间的总和
- 我没有删除它,但是
是多余的,因为empname notnull
处理这个问题notin