我有一个 16k 行的表,其中的列如下
ID, author_name, letter;
(其中字母是名字的第一个字母)
我想做一个 sql 查询,为来自 az 的每个字母按 3 人一组列出作者
喜欢:
A
Albert,
Ana,
Antony,
B
Ben,
Boston,
Bell,
我怎样才能写这个查询?谢谢你。
我有一个 16k 行的表,其中的列如下
ID, author_name, letter;
(其中字母是名字的第一个字母)
我想做一个 sql 查询,为来自 az 的每个字母按 3 人一组列出作者
喜欢:
A
Albert,
Ana,
Antony,
B
Ben,
Boston,
Bell,
我怎样才能写这个查询?谢谢你。
尝试这个, :
set @counter =0, @letter:='';
select * from
(select @counter:=if(letter=@letter, @counter+1,1) as counter, @letter = letter, author
from table
order by letter, author) as t
where counter<=3
order by letter, name
它用于与以前的值进行比较,并在字母发生变化时重新编号,否则通过递增。
我已经为你创建了查询
SELECT GROUP_CONCAT(id) FROM TABLE NAME ORDER BY id
SELECT GROUP_CONCAT(author_name) FROM TABLE NAME ORDER BY id
SELECT GROUP_CONCAT(letter) FROM TABLE NAME ORDER BY id
现在你会得到这样的结果:
A
Albert, Ana, Antony,
B
Ben, Boston, Bell,
http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/