所以我有一个500行的查询,我将尝试在一个简单的查询中进行总结:
SELECT
max(t.USER_ID)
,max(t.OFFICE_ID)
,COUNT(CASE WHEN t.VALUE > 10 THEN 1 ELSE 0 END)
/COUNT(t.VALUE) as Value_Avg
FROM(
SELECT
p.USER_ID
,c.OFFICE_ID
,h.VALUE
, ... etc (Join, Where, ...)
) t
GROUP BY t.USER_ID
类似的查询将给出以下结果:
USER_ID OFFICE_ID Value_Avg
1001 100 0.8
1002 100 0.75
1010 200 0.50
基本上按用户显示大于10的值的百分比。
现在,假设用户1001有20条日志,用户1002有10条日志,而我也想按部门平均取第4列,那么如果我只能按一组使用,我该怎么做呢? / p>
答案 0 :(得分:1)
您似乎想要:
SELECT p.USER_ID, c.OFFICE_ID,
AVG(CASE WHEN t.Value > 10 THEN 1.0 ELSE 0 END) as value_avg
FROM . . .
GROUP BY p.USER_ID, c.OFFICE_ID;
您不需要子查询。假设Value
从未为NULL
。如果是这样,则将表达式更改为:
AVG(CASE WHEN t.Value > 10 THEN 1.0
WHEN t.Value IS NOT NULL THEN 0
END) as value_avg
答案 1 :(得分:1)
您需要在单独的查询中计算部门平均值。然后与您当前的查询一起添加部门平均值
WITH dept as (
SELECT t.OFFICE_ID,
COUNT(CASE WHEN t.VALUE > 10 THEN 1 ELSE 0 END)
/ COUNT(t.VALUE) as dept_Avg
FROM ( ... ) t
GROUP BY t.OFFICE_ID
)
SELECT
max(t.USER_ID)
, max(t.OFFICE_ID)
, COUNT(CASE WHEN t.VALUE > 10 THEN 1 ELSE 0 END)
/ COUNT(t.VALUE) as Value_Avg
, MAX( d.dept_Avg ) as dept_Avg
FROM ( ... ) t
JOIN dept d
ON t.OFFICE_ID = d.OFFICE_ID
GROUP BY t.USER_ID