为简单起见,假设我有一个包含 2 个字段的表 - PERSON_NAME 和 COMPANY_ID 与这些对:
('a',1) ('b',1) ('c',2) ('d',2) ('e',3)
PERSON_NAME a 和 b 在 COMPANY_ID 1 中工作,依此类推。
我想为前 2 个(或 N 个)COMPANIES 选择所有行 -
('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。