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