我有一张这样的桌子
----------------------
| ID | Name | Salary |
| -- | --- | --- |
| 1 | A | 1000 |
| 2 | B | 4000 |
| 3 | C | 5000 |
| 4 | B | 600 |
| 5 | C | 2000 |
| 6 | A | 5000 |
| 7 | B | 4000 |
----------------------我想查询整个表中的最高工资和每个学生的最高工资。我可以写两个查询,
>> SELECT MAX(Salary) FROM TABLE
>> SELECT NAME, MAX(SALARY) FROM TABLE GROUP BY NAME现在,我希望在不使用两个查询的情况下,在单个查询中执行相同的操作。我该怎么接近?
发布于 2021-08-03 14:31:40
ROLLUP可以用来给出一个额外的行作为一个‘摘要’,所以给出整个最大值.
SELECT name, MAX(salary)
FROM TABLE
GROUP BY name
WITH ROLLUP
ORDER BY GROUPING(name) DESC,
name就会屈服..。
| Name | Salary |
| --- | --- |
| NULL | 5000 |
| A | 5000 |
| B | 4000 |
| C | 5000 |发布于 2021-08-03 14:26:35
有一种方法:
SELECT NAME, MAX(SALARY) , max(max(salary)) over()
FROM TABLE GROUP BY NAME发布于 2021-08-03 14:41:17
您可以使用GROUP BY对Name字段进行分组,在Salary字段上使用ORDER BY ... DESC来获得最大值。
SELECT PrimaryField, MaxField
FROM MyTable
GROUP By PrimaryField
ORDER BY MaxField DESC;解释:
SELECT PrimaryField, MaxField --我们want.FROM MyTable的字段--我们要作为主field.ORDER BY MaxField DESC;处理的表--因为我们按PrimaryField分组,所以每个PrimaryField唯一值只有一行。如果我们订购MaxField,我们可以根据需要得到它的最小或最大。特别是对你来说:
SELECT Name, Salary
FROM TABLE
GROUP By Name
ORDER BY Salary DESC;https://stackoverflow.com/questions/68637799
复制相似问题