直到今天我才认为我对MySQL有所了解。 好的,我们假设我们有一个这样的表:
id | some_name |some_number
-----------------------------
1 | test | 33
2 | test | 34
3 | test | 35
3 | test2 | 36
3 | test2 | 37
我想编写查询以返回这样的内容:
test 33
test 34
test2 36
test2 37
test3 12
test3 34
.
.
.
等等。我想每个同名只返回2个结果。它很容易使用限制并且每个名称只返回一个结果,但我坚持在这种情况下返回每个相同名称的多个结果2,但可能是n结果。解决方法是制作一些可以执行的脚本:
select some_name, some_number from tbl_name limit 2;
并为表格中的每个不同的some_name重复它。 有没有优雅的MySQL解决方案?如果你和我分享,我将不胜感激。
答案 0 :(得分:1)
您可以使用用户变量添加名称每行的计数器,然后只选择计数器小于或等于2的行(未经测试): -
SELECT some_name, some_number
FROM
(
SELECT some_name, some_number, @cnt=(@some_name = some_name, @cnt + 1, 1) AS cnt, @some_name:=some_name
FROM
(
SELECT some_name, some_number
FROM tbl_name
ORDER BY some_name, some_number
) sub0
CROSS JOIN
(
SELECT @some_name:='', @cnt:=0
)
sub1
) sub2
WHERE cnt <= 2
答案 1 :(得分:1)
你可以试试这个,
select some_name,some_number from yourTable t
where
(select count(*) from yourTable
where
some_number<=t.some_number and some_name=t.some_name)<3
答案 2 :(得分:0)
这部分解决了我的问题:
set @num := 0, @name := '';
select distinct number, name
from (
select number, name,
@num := if(@name = name, @num +1, 1) as row_number,
@name := name as dummy
from karian2
) as x where x.row_number <= 2;
由于子查询未返回不同的值,因此无法返回2个结果。这里的例子: http://sqlfiddle.com/#!2/952ca/23