求按照城市分布的平均薪资和总薪资,并按照城市内的总薪资倒序排序,只取每个城市总薪资的top1。hive语法
时间: 2023-12-06 09:45:24 浏览: 52
假设有一个包含城市和薪资的表格,表格名为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,即每个城市总薪资最高的那一行。
相关问题
求按照城市分布的平均薪资和总薪资,并按照城市内的总薪资倒序排序,只取每个城市总薪资的top1。用cte
假设有一个名为`salary`的表,包含以下字段: `city`(城市), `salary`(薪资)。
可以使用CTE来按照城市分布计算平均薪资和总薪资,并按照城市内的总薪资倒序排序,只取每个城市总薪资的top1。具体SQL如下:
```
WITH city_salary AS (
SELECT
city,
AVG(salary) AS avg_salary,
SUM(salary) AS total_salary
FROM salary
GROUP BY city
)
SELECT
city,
total_salary,
avg_salary
FROM (
SELECT
city,
total_salary,
avg_salary,
ROW_NUMBER() OVER (PARTITION BY city ORDER BY total_salary DESC) AS rn
FROM city_salary
) AS ranked_city_salary
WHERE rn = 1
ORDER BY total_salary DESC;
```
首先使用CTE `city_salary` 计算每个城市的平均薪资和总薪资。
然后在外部查询中,使用`ROW_NUMBER()`函数对每个城市的总薪资进行排名,并只选择排名为1的记录,即每个城市总薪资的top1。
最后按照总薪资倒序排序。
求按照城市分布的平均薪资和总薪资并按照城市内的总薪资倒叙排序只取每个城市总薪资的top1hive语法
假设你的数据表名为`salary`,包含以下字段:`city`(城市名称),`salary`(薪资)。
首先,我们可以使用以下语句计算每个城市的平均薪资和总薪资:
```
SELECT
city,
AVG(salary) AS avg_salary,
SUM(salary) AS total_salary
FROM
salary
GROUP BY
city
```
接下来,我们可以将上述语句作为子查询,并使用`ORDER BY`和`LIMIT`语句按照城市内的总薪资倒序排序并取每个城市总薪资的top1,如下所示:
```
SELECT
city,
total_salary
FROM
(
SELECT
city,
SUM(salary) AS total_salary
FROM
salary
GROUP BY
city
) t
ORDER BY
total_salary DESC
LIMIT
1
```
这样就能够得到每个城市的总薪资排名第一的结果。注意,这里只取了每个城市的总薪资,并没有计算平均薪资。如果需要同时考虑平均薪资和总薪资,可以将上述两个查询合并起来,但是需要注意在`ORDER BY`语句中如何排序。
阅读全文