MySQL每个结果返回2行

时间:2015-09-02 16:40:09

标签: mysql

直到今天我才认为我对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解决方案?如果你和我分享,我将不胜感激。

3 个答案:

答案 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