在mysql中选择limit result

k4emjkb1  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(420)

我有一个包含这些数据的表格:

Id  City        Amount
1   London      25000
2   New York    20000
3   London      23000
4   Paris       22000
5   Moscow      18000
6   London      21000
7   New York    19000
8   Moscow      26000
9   London      24000
10  Moscow      16000
11  London      15000
12  Moscow      23000
13  Paris       19000
14  New York    15000
15  London      26000

我必须创建sql作为什么来得到这样的结果?

Id  City        Amount
1   London      25000
2   New York        20000
3   London      23000
4   Paris       22000
5   Moscow      18000
7   New York        19000
8   Moscow      26000
13  Paris       19000

这意味着我只想得到一个城市最多只出现2次。
我只想拿到前两张或者后两张
谢谢!

sigwle7e

sigwle7e1#

如果您的mysql版本<8.0,您可以模拟 RowNumber 功能,使用会话变量。实现 Partition By 基于分组的功能,我们将使用两个会话变量,一个用于行号,另一个用于存储旧的 City 将其与当前值进行比较,如果属于同一个值,则将其递增1 City 组,否则重置为1。
下面的代码将获取前两条记录。通过在查询中将2更改为n,可以很容易地将其更改为获取前n条记录。

SET @row_number = 0;
SET @city_var = '';
SELECT inner_nest.Id, 
       inner_nest.City, 
       inner_nest.Amount 
FROM (
      SELECT 
            @row_number:=CASE 
                             WHEN @city_var = City THEN @row_number + 1
                             ELSE 1
                         END AS num, 
            Id, 
            @city_var:=City as City, 
            Amount
      FROM
          table_name
      ORDER BY 
              City) AS inner_nest 
WHERE inner_nest.num <= 2 
ORDER BY inner_nest.Id ASC

**

sql小提琴

**

相关问题