我试图在mysql中找到每个城市的最高时薪,而我的子查询是工作我的整个查询是不工作

mlnl4t2r  于 2023-10-15  发布在  Mysql
关注(0)|答案(3)|浏览(80)

我的子查询

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;

我希望得到每个城市的工资最高的行,以及只有一个人的城市,只从那个城市返回那一行。

4uqofj5v

4uqofj5v1#

您遇到的问题与直接在WHERE子句中使用rank关键字有关。在MySQL中,需要给ranking列取别名,以便在外部查询的WHERE子句中使用它。
以下是我如何修改您的查询:

SELECT *
FROM (
  SELECT *,
         RANK() OVER (PARTITION BY city ORDER BY hourly_pay DESC) AS ranking
  FROM persons
) AS b
WHERE b.ranking = 1;

我在子查询中将排名列命名为my_rank。然后,在外部查询中,我使用subquery.my_rank = 1过滤行。这应该会让你获得每个城市的最高时薪,而且它还应该修复你看到的MySQL错误代码1064。

iyr7buue

iyr7buue2#

您可以使用公用表表达式(CTE)计算秩,然后从CTE中选择秩为1的行。

WITH RankedPersons AS (
    SELECT *,
           RANK() OVER (PARTITION BY city ORDER BY hourly_pay DESC) AS ranking
      FROM persons
)
SELECT *
  FROM RankedPersons
 WHERE ranking = 1;
jaql4c8m

jaql4c8m3#

如果Rank()函数在您使用的mysql版本中不起作用,请尝试以下查询:

select city,hourly_pay 
from (
    select p.city, p.hourly_pay,
       (select count(*)
        from persons p2
        where p2.city = p.city AND
              p2.hourly_pay >= p.hourly_pay
       ) as rank
from persons p) as t
where rank = 1;

相关问题