使用mysql选择第一个N *组*

时间:2013-08-31 15:53:23

标签: mysql

为简单起见,假设我有一个包含2个字段的表格 - PERSON_NAME和带有这些字段的COMPANY_ID:

('a',1) ('b',1) ('c',2) ('d',2) ('e',3)

PERSON_NAME a和b正在使用COMPANY_ID 1,依此类推。

我想为前2个(或N个)公司选择所有行 -

('a',1) ('b',1) ('c',2) ('d',2)

我不知道每个COMPANY_ID有多少行。

GROUP BY在这里不起作用,因为我需要每个COMPANY_ID中的所有行。
这个工作 -

SELECT * FROM T
WHERE COMPANY_ID in (SELECT DISTINCT COMPANY_ID
                     FROM T
                     ORDER BY 1 DESC
                     LIMIT N)

但由于表现是一个问题,这是不够的(每家公司约有25,000家公司和约5-15人)。 N通常为500。

1 个答案:

答案 0 :(得分:1)

将此作为联接来代替:

SELECT T.*
FROM T join
     (SELECT DISTINCT COMPANY_ID
      FROM T
      ORDER BY 1 DESC
      LIMIT N
     ) TN
     on TN.COMPANY_ID = T.COMPANY_ID;

显式联接的效果通常优于in子句中的where