Mysql 按a到z排序,带限制
我有一个表customers,其中有一个字段“name”,其中包含a到z名称记录 我使用asc查询从a到z获取记录Mysql 按a到z排序,带限制,mysql,sql,select,sql-order-by,top-n,Mysql,Sql,Select,Sql Order By,Top N,我有一个表customers,其中有一个字段“name”,其中包含a到z名称记录 我使用asc查询从a到z获取记录 SELECT * FROM `customers` ORDER BY name ASC 但是,我怎样才能得到5条记录,这些记录都是从a到z字母开始的,只有一个查询 输出: 1| aa|1 2| ab|2 4| ba|1 5| bb|2 7| ca|1 8| cb|2 a a a a a b b b b b 依此类推到z。 提前谢谢 试试这个: SELECT
SELECT * FROM `customers` ORDER BY name ASC
但是,我怎样才能得到5条记录,这些记录都是从a到z字母开始的,只有一个查询
输出:
1| aa|1
2| ab|2
4| ba|1
5| bb|2
7| ca|1
8| cb|2
a
a
a
a
a
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时,您可以使用诸如、和行数之类的函数
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
这是否需要作为单个sql语句/查询来完成,还是可以调用存储过程/函数来提供结果?@Raad作为单个查询。相关信息:Saharsh Shah我在mysql中得到结果,但在sqlite中没有。您能帮我了解sqlite吗?@TonyStark抱歉,我是sqllite的新手。如果您能帮我,我将收到此错误[无法识别的令牌::]。@TonyStark抱歉,但我无法帮助您了解SQLLiteOk np。谢谢你的回答,但我以后会接受的。我也需要它在sqlite,但我可以给你投票。你能解释一下你的疑问吗?太神奇了。