我有一个包含100000行的表,其中有一个列说drugname,其类型为varchar。
列的值可以从0到9开始 A-Z或a-z。
我需要一个返回25000行的查询。在25000行中,它应包含所有字母和数字。
比如说,
包括所有数字和字母,总体而言应该有25000行。
答案 0 :(得分:0)
首先为所有组选择最小的id组(通过第一个char)
select min(id) as substrId
from the_table
group by substr(value,0,1)
然后使用subselect首先返回选定的id(表示所有组),然后使用一些随机ID
select t1.*
from the_table t1
left join (select min(id) as substrId
from the_table
group by substr(value,0,1)) sub on t1.id=sub.substrId
order by ifnull(sub.substrId, 0) desc
limit 25000
因此,所有不同的组成员都包含在最终结果集中。
答案 1 :(得分:0)
根据第一个字符枚举行。然后使用枚举来获取行:
AuthController
注意:这将返回每个字母的药品名称最小的行。如果您想要随机的,请使用此select d.*
from (select d.*,
(@rn := if(@l = left(d.drugname, 1), @rn + 1,
if(@l := left(d.drugname, 1), 1, 1)
)
) as seqnum
from drugs d cross join
(select @rn := 0, @l := '') params
order by d.drugname
) d
order by seqnum
limit 25000;
:
order by