我希望获得列的平均值
姓名薪水
HI 33168,00
你好32882,00
当我尝试使用以下查询时
select Name, Salary, Avg(Salary) as avg from table group by name, Salary
我的薪水和平均薪水都是相同的价值。
预期结果:
Name Salary
HI 33168,00
Hello 32882,00
avg 33025,00
答案 0 :(得分:1)
如果按[姓名]和[薪水]分组,假设您的姓名是唯一的,您将获得每个[姓名]一个平均工资,这将与工资值相同
select Avg(Salary) as avg from table
如果您想要详细信息和平均行,则可以使用union all
select name, Salary from table
UNION ALL
select 'Avg', Avg(Salary) from table
答案 1 :(得分:1)
要获得所有Salary
值的总体平均值,请不要对结果进行分组:
select Avg(Salary) as avg from table
要获得每个Salary
的{{1}}的平均值,您必须仅按Name
分组,而不是Name
分组:
Salary
这将计算表格中每个名称的工资平均值。
答案 2 :(得分:1)
如果按名称和薪水分组,每个此类组合将获得一行。在许多情况下,这意味着avg(薪水)将与薪水相同。如果您只想获得每个名字的平均值(工资):
select Name, Avg(Salary) as avg from table group by name
如果你想要每个人的薪水,你可以用工会来做:
select Name, Avg(Salary) as salary from table group by name
union
select Name, Salary from table
后者的捷径是:
select Name, Salary, Avg(Salary) as salary from table
GROUP BY GROUPING SETS((Name, salary), (Name))
答案 3 :(得分:0)
如果您只想在现有表格中添加平均工资,可以使用with rollup
(或grouping sets
):
select coalesce(name, 'avg') as name, avg(salary) as salary
from table
group by name, salary with rollup;
avg(salary)
对名称没有任何作用,但它确实允许with rollup
添加一行的总体平均值。
如果每个名称有多行,并且您想要平均值,则可以执行以下操作:
select coalesce(name, 'avg') as name, avg(salary) as salary
from table
group by name with rollup;