6

我有一张表客户,其中有一个字段“名称”,其中包含 a 到 z 名称记录。

我使用 asc 查询从 a 到 z 获取记录

SELECT * FROM `customers` ORDER BY name ASC

但是我怎样才能得到 5 条记录,这些记录以所有 a 到 z 字母开头,只有一个查询?

输出:

  1. 一种

  2. 一种

  3. 一种

  4. 一种

  5. 一种

  6. b

  7. b

  8. b

  9. b

  10. b 以此类推到 z。提前致谢。

4

2 回答 2

1

试试这个:

SELECT c.name
FROM (SELECT c.name, IF(@lastLetter=@lastLetter:=LEFT(c.name, 1), @cnt:=@cnt+1, @cnt:=0) letterCnt
      FROM customers c, (SELECT @lastLetter:='', @cnt:=0) A 
      ORDER BY c.name ASC
    ) AS c
WHERE c.letterCnt < 5
于 2014-01-20T12:37:57.237 回答
-1

当您使用 SQL 时,您可以使用RankDENSE_RANK和 ROW_NUMBER等函数

DECLARE @Customer AS TABLE
(
    Id int,
    Name varchar(50)
)

INSERT INTO @Customer VALUES
(1, 'aa'),
(2, 'ab'),
(3, 'ac'),
(4, 'ba'),
(5, 'bb'),
(6, 'bc'),
(7, 'ca'),
(8, 'cb'),
(9, 'cc')

select *
from (
    select *, 
        RANK() OVER(PARTITION BY SUBSTRING(Name, 1, 1) ORDER BY Name ASC) AS [Rank] 
    from @Customer
) tableWithRank
WHERE tableWithRank.Rank <= 2

输出:

1|  aa|1

2|  ab|2

4|  ba|1

5|  bb|2

7|  ca|1

8|  cb|2
于 2014-01-20T13:01:04.940 回答