我有一张表客户,其中有一个字段“名称”,其中包含 a 到 z 名称记录。
我使用 asc 查询从 a 到 z 获取记录
SELECT * FROM `customers` ORDER BY name ASC
但是我怎样才能得到 5 条记录,这些记录以所有 a 到 z 字母开头,只有一个查询?
输出:
一种
一种
一种
一种
一种
b
b
b
b
b 以此类推到 z。提前致谢。
我有一张表客户,其中有一个字段“名称”,其中包含 a 到 z 名称记录。
我使用 asc 查询从 a 到 z 获取记录
SELECT * FROM `customers` ORDER BY name ASC
但是我怎样才能得到 5 条记录,这些记录以所有 a 到 z 字母开头,只有一个查询?
输出:
一种
一种
一种
一种
一种
b
b
b
b
b 以此类推到 z。提前致谢。
试试这个:
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
当您使用 SQL 时,您可以使用Rank、DENSE_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