我在选择特定数据量时遇到问题。问题是其中一个键具有相同的重复值。
--------------------
| id | name | key |
--------------------
| 1 | alfa | a |
| 2 | alfa | b |
| 3 | alfa | c |
| 4 | beal | a |
| 5 | beal | b |
| 6 | gala | c |
| 7 | gala | d |
| 8 | delt | a |
| 9 | ceta | a |
--------------------
在这种情况下,我想选择三个单独的名称。例如,我想将不同的名称限制为 3 个位置以获得此结果:
示例转储代码:
SELECT * in Table
WHERE `name` LIKE '%al%'
LIMIT BY DISTINCT
`name`, 3
------ RESULT ------
| 1 | alfa | a |
| 2 | alfa | b |
| 3 | alfa | c |
| 4 | beal | a |
| 5 | beal | b |
| 6 | gala | c |
| 7 | gala | d |
--------------------
我很乐意提供帮助。
最佳答案
没有窗口函数:
select *
from (
select distinct name
from mytable
where `name` like '%al%'
order by name
limit 3
) n
natural join mytable
如果您不喜欢自然连接,您也可以使用
select t.*
from (
select distinct name
from mytable
where `name` like '%al%'
order by name
limit 3
) n
join mytable t on t.name = n.name
如果支持窗口函数,可以使用DENSE_RANK()
:
with cte as (
select *,
dense_rank() over (order by name) as dr
from mytable
where `name` like '%al%'
)
select id, name, `key`
from cte
where dr <= 3
我更喜欢 LIMIT 3
子查询,因为它可以在找到三个不同的名称后停止索引扫描(取决于优化器)。
关于mysql - SELECT 查询,其中 LIMIT 是重复键的不同计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57006591/