我的子查询
select
*,
rank() over(partition by city order by hourly_pay desc)
from persons as a;
我的整个查询
select *
from
(
select
*,
rank() over(partition by city order by hourly_pay desc)
from persons
) as b
where rank = 1;
我在MySQL中得到的错误是错误代码1064。
表格
| ID| Name1|日期|时薪|市|
| --|--|--|--|--|
| 1 |Mohit| 2016-07-07 2016-07-07| 12000 |纳希克|
| 2 |Vish| 2018-07-07 2018-07-07| 11000 |古尔冈|
| 3 |Rishi| 2019-07-07| 12000 |赖布尔|
| 4 |Kartik| 2020-08-18| 25000 |斋浦尔|
| 5 |Stephan| 2010-04-18 2010-04-18| 17000 |比拉斯布尔|
| 6 |布鲁克|2010-02-02 2010 -02-02| 19000 |德里|
| 7 |Arjun| 2009年05月05日| 42000 |古尔冈|
| 8 |Shub| 2005-04-05| 52000 |钦奈|
| 9 |乔|2010-05-05 2010-05-05| 32000 |潘集|
| 10 |韦德|2001-04-05| 49000 |昌迪加尔|
| 11 |卡尔提|2008-04-05| 72000 |新加坡|
| 12 |Arjun| 2007年05月05日| 32000 |古尔冈|
| 13 |莫克希|2005年05月05日| 33000 |孟买|
| 14 |Hema| 2005年05月05日| 60000 |代拉敦|
| 15 |德雷克|2001-01-01| 20000 |德里|
我也试过:
select *
from
(
select
*,
rank() over(partition by city order by hourly_pay desc)
from persons as a
) as b
where rank = 1;
我希望得到每个城市的工资最高的行,以及只有一个人的城市,只从那个城市返回那一行。
3条答案
按热度按时间4uqofj5v1#
您遇到的问题与直接在
WHERE
子句中使用rank
关键字有关。在MySQL中,需要给ranking列取别名,以便在外部查询的WHERE
子句中使用它。以下是我如何修改您的查询:
我在子查询中将排名列命名为
my_rank
。然后,在外部查询中,我使用subquery.my_rank = 1
过滤行。这应该会让你获得每个城市的最高时薪,而且它还应该修复你看到的MySQL错误代码1064。iyr7buue2#
您可以使用公用表表达式(CTE)计算秩,然后从CTE中选择秩为1的行。
jaql4c8m3#
如果Rank()函数在您使用的mysql版本中不起作用,请尝试以下查询: