求按照城市分布的平均薪资和总薪资并按照城市内的总薪资倒叙排序只取每个城市总薪资的top1hive语法
时间: 2023-12-10 19:38:06 浏览: 74
假设你有一个名为`salary_table`的Hive表,包含以下列:
- `city`:城市名称
- `salary`:薪资
那么可以按照如下方式进行求解:
```sql
SELECT city, SUM(salary) AS total_salary, AVG(salary) AS avg_salary
FROM salary_table
GROUP BY city
ORDER BY total_salary DESC
```
这将按照城市分组,计算每个城市的总薪资和平均薪资,然后按照总薪资倒序排序。
如果你只想取每个城市总薪资的top1,可以在SELECT语句中添加一个RANK() OVER()函数,并在外部SELECT语句中筛选出排名为1的行,例如:
```sql
SELECT city, total_salary
FROM (
SELECT city, SUM(salary) AS total_salary,
RANK() OVER (PARTITION BY city ORDER BY SUM(salary) DESC) AS rnk
FROM salary_table
GROUP BY city
) t
WHERE rnk = 1
ORDER BY total_salary DESC
```
这将对每个城市的数据进行排序,并在外部查询中只保留排名为1的行,按照总薪资倒序排序。
相关问题
求按照城市分布的平均薪资和总薪资并按照城市内的总薪资倒叙排序只取每个城市总薪资的top1,城市和薪资分别为两个表,hive语法
假设城市表名为 city,包含字段为 city_name,薪资表名为 salary,包含字段为 city_name 和 salary。
按照城市分布的平均薪资和总薪资:
```sql
SELECT
city_name,
AVG(salary) AS avg_salary,
SUM(salary) AS total_salary
FROM
salary
GROUP BY
city_name;
```
按照城市内的总薪资倒序排序,只取每个城市总薪资的 top1:
```sql
SELECT
city_name,
SUM(salary) AS total_salary
FROM
salary
GROUP BY
city_name
ORDER BY
total_salary DESC
LIMIT
1;
```
将两个 SQL 语句结合起来,得到如下的 SQL 语句:
```sql
SELECT
c.city_name,
AVG(s.salary) AS avg_salary,
SUM(s.salary) AS total_salary
FROM
salary s
JOIN
city c
ON
s.city_name = c.city_name
GROUP BY
c.city_name
ORDER BY
SUM(s.salary) DESC
LIMIT
1;
```
这个 SQL 语句的含义是:先将城市表和薪资表连接起来,然后按照城市分组,计算每个城市的平均薪资和总薪资,最后按照总薪资倒序排序,只取排序后的第一个结果。
求按照城市分布的平均薪资和总薪资,并按照城市内的总薪资倒序排序,只取每个城市总薪资的top1。hive语法
假设有一个包含城市和薪资的表格,表格名为salary,城市列名为city,薪资列名为salary_amount,则可以使用以下Hive SQL语句实现按照城市分布的平均薪资和总薪资,并按照城市内的总薪资倒序排序,只取每个城市总薪资的top1:
```
SELECT city, SUM(salary_amount) AS total_salary, AVG(salary_amount) AS avg_salary
FROM salary
GROUP BY city
ORDER BY total_salary DESC
LIMIT 1;
```
该查询首先按照城市列对表格进行分组,计算每个城市的总薪资和平均薪资,并按照总薪资倒序排序。然后通过 LIMIT 1 只取每个城市的 top1,即每个城市总薪资最高的那一行。
阅读全文