限制基于没有group by的列值组接收的结果数

时间:2013-08-30 14:19:13

标签: mysql

以下是我的查询的当前输出:SELECT vans,icollaborate_id FROM mytable;

+==========+=====================+
|   vans   |   icollaborate_id   |
+==========+=====================+
| sachin   |   10                |
| cricket  |   10                |
| chess    |   10                |
| male     |   11                |
| 31-40    |   11                |
| sachin   |   11                |
| female   |   12                |
| tennis   |   12                |
| 21-30    |   12                |
+----------+---------------------+

现在我想生成一个返回相同输出但有限制的结果。 例如,如果用户指定limit=2,则输出应如下所示:

预期输出限制为2

+==========+=====================+
|   vans   |   icollaborate_id   |
+==========+=====================+
| sachin   |   10                |
| cricket  |   10                |
| chess    |   10                |
| male     |   11                |
| 31-40    |   11                |
| sachin   |   11                |
+----------+---------------------+

预期输出限制为3

+==========+=====================+
|   vans   |   icollaborate_id   |
+==========+=====================+
| sachin   |   10                |
| cricket  |   10                |
| chess    |   10                |
| male     |   11                |
| 31-40    |   11                |
| sachin   |   11                |
| female   |   12                |
| tennis   |   12                |
| 21-30    |   12                |
+----------+---------------------+

请告知。

4 个答案:

答案 0 :(得分:1)

您可以使用join

执行此操作
SELECT vans, icollaborate_id 
FROM t join
     (select distinct icollaborate_id
      from t
      order by icollaborate_id
      limit 3
     ) tokeep
     on t.icollaborate_id = tokeep.icollaborate_id
order by icollaborate_id;

编辑:

顺便说一句,以下查询可能会执行您想要的操作:

select icollaborate_id, group_concat(vans)
from t
group by icollaborate_id
limit 3;

这会将所有vans放在以逗号分隔的列表中的单行上。

答案 1 :(得分:0)

您可以使用DISTINCT查询

SELECT DISTINCT icollaborate_id FROM table_name WHERE icollaborate_id = '10';

答案 2 :(得分:0)

此版本的MySQL尚不支持'LIMIT& IN / ALL / ANY / SOME子查询'

我的回复无效,感谢Gordon Linoff指出这一点。

我相信你要找的东西(如果你只想要一个查询)是这样的:

SELECT 
     vans, icollaborate_id 
FROM 
    mytable
WHERE icollaborate_id in
    (
        SELECT distinct t2.icollaborate_id FROM mytable t2 
               ORDER BY  t2.icollaborate_id LIMIT YOUR_LIMIT
    )

子选择标识它应该查看多少个不同的值,然后主查询选择包含这些值的所有行。 这个查询可能非常缺乏,您可能需要考虑这一点。

答案 3 :(得分:0)

试试这个

SELECT vans,icollaborate_id FROM table_name WHERE icollaborate_id IN( SELECT * FROM (SELECT DISTINCT icollaborate_id FROM table_name LIMIT 3) as t);