Mysql 计算每个州emp_名称中字母数相同的emp的平均工资
我们在下面有一张表Mysql 计算每个州emp_名称中字母数相同的emp的平均工资,mysql,hive,Mysql,Hive,我们在下面有一张表 +-------------+----------+-----+------+---+-----+ |employee_name|department|state|salary|age|bonus| +-------------+----------+-----+------+---+-----+ |James |Sales |NP |90000 |34 |10000| |Michael |Sales |NP |86000 |5
+-------------+----------+-----+------+---+-----+
|employee_name|department|state|salary|age|bonus|
+-------------+----------+-----+------+---+-----+
|James |Sales |NP |90000 |34 |10000|
|Michael |Sales |NP |86000 |56 |20000|
|Corne |Sales |NP |86000 |56 |20000|
|Robert |Sales |CA |81000 |30 |23000|
|Maria |Finance |CA |90000 |24 |23000|
|Raman |Finance |CA |99000 |40 |24000|
|Scott |Finance |NY |83000 |36 |19000|
|Jen |Finance |NY |79000 |53 |15000|
|Jeff |Marketing |DC |80000 |25 |18000|
|Kumar |Marketing |DC |91000 |50 |21000|
+-------------+----------+-----+------+---+-----+
需要这样的输出吗
+-------------+-----+-----------+
|employee_name|state|avg(salary |
+-------------+-----+-----------+
|James |NP |88000 |
|Corne |NP |88000 |
|Maria |CA |90000 |
|Raman |CA |94500 |
|+-------------+----------+-----+
我已经写了一个查询,但没有得到预期的结果
select t.state, t.employee_name ,avg(salary) from temp t
join
(select t1.state, t1.employee_name,length(t1.employee_name) from temp t1
group by t1.state, t1.employee_name )t2
on
t.employee_name = t2.employee_name
where
length(t.employee_name) = length(t2.employee_name)
group by t.state,t.employee_name,t.salary
我的输出不按长度过滤
+-----+-------------+-----------+
|state|employee_name|avg(salary)|
+-----+-------------+-----------+
| NP| James| 90000.0|
| NP| Michael| 86000.0|
| CA| Robert| 81000.0|
| CA| Maria| 90000.0|
| CA| Raman| 99000.0|
| NY| Scott| 83000.0|
| NY| Jen| 79000.0|
| DC| Kumar| 91000.0|
| DC| Jeff| 80000.0|
+-----+-------------+-----------+
请帮助我更正我的查询使用分析功能:
select employee_name, state,
avg(salary) over(partition by state, length(employee_name)) avg_salary
from temp;
演示:
结果:
employee_name state avg_salary
Maria CA 94500
Raman CA 94500
Robert CA 81000
Jeff DC 80000
Kumar DC 91000
James NP 88000
Corne NP 88000
Michael NP 86000
Jen NY 79000
Scott NY 83000
不知道为什么他们在这里投了-1票。。我累了,把查询贴在那里。。。你能证明Maria和Raman应该有相同的平均工资吗?因为他们的名字长度相同,并且在同一个州。不清楚你需要什么样的长度过滤。仅5个字符?根据每个州相同长度的emp_名称,需要平均工资。。。我不正确。需要基于每个州相同长度的emp_名称的平均工资。。你的问题是共同海损salary@Joe它是基于相同长度的emp_名称state@Joe我添加了带有结果的演示。请你看一下结果,告诉我什么是不正确的?也许我不明白应该做什么,它应该与员工的长度相匹配,即Maria和Raman的长度相同(字母5),而不是Robert。。其他人也是如此。。上述问题的结果是前两行只有两个名字的平均工资。@Joe是的,Maria和Raman有相同的平均工资,因为他们的长度相同,处于相同的状态。罗伯特有不同的平均值。玛丽亚和拉曼应该有相同的平均值吗?对不起,我不明白是怎么回事,请看一下我答案中的结果
employee_name state avg_salary
Maria CA 94500
Raman CA 94500
Robert CA 81000
Jeff DC 80000
Kumar DC 91000
James NP 88000
Corne NP 88000
Michael NP 86000
Jen NY 79000
Scott NY 83000