mysql order by,根据输入使用前四行、三行或两行分组

mysql order by,根据输入使用前四行、三行或两行分组,mysql,sql,join,select,greatest-n-per-group,Mysql,Sql,Join,Select,Greatest N Per Group,选择fname作为“经理”,lname作为“DR” 来自emps e 内连接emps m 关于m.empId=e.repTo 经理命令 上述查询的结果是 manager1 repor1 manager1 repor2 manager1 repor3 manager2 repor4 manager2 repor5 manager3 repor6 manager3 repor7 manager3 repor8 manager4

选择fname作为“经理”,lname作为“DR” 来自emps e 内连接emps m 关于m.empId=e.repTo 经理命令

上述查询的结果是

 manager1    repor1
 manager1    repor2
 manager1    repor3
 manager2    repor4
 manager2    repor5
 manager3    repor6
 manager3    repor7
 manager3    repor8
 manager4    repor9
 manager4    repor1
如何选择前两个管理器详细信息、三个管理器详细信息或N个管理器详细信息

两个manager详细信息意味着它应该返回如下所示

 manager1    repor1
 manager1    repor2
 manager1    repor3
 manager2    repor4
 manager2    repor5

一个选项使用相关子查询进行筛选:

select m.fname AS manager, e.lname AS dr
from emps e 
inner join emps m on m.empId = e.repTo
where (select count(*) from emps e1 where e1.repTo = e.repTo and e1.lname <= e.lname) <= 2
order by manager
一,

二,


不清楚您要订购什么。如果ids有效,则:

SELECT fname AS manager, lname AS DR
FROM emps e INNER JOIN
     emps m
     ON m.empId = e.repTo 
WHERE e.manager <= (SELECT DISTINCT m2.repTo
                    FROM emps m
                    ORDER BY m2.repTo
                    LIMIT 1 OFFSET 1
                   );

限制意味着它返回了前2条记录,这是MySQL的另一个版本,没有棒棒糖。请参阅mysql版本5.5.21谢谢您的回复。它返回每个经理的前两条记录。manager1 repor1 manager1 repor2 manager2 repor4 manager2 repor5 manager3 repor6 manager3 repor7 manager4 repor9 manager4 repor11我想要两个经理详细信息
```select * from table_name A left join
(select distinct TOP 2 manager from table_name order by manager Asc) B on A.manager = B.manager```
SELECT fname AS manager, lname AS DR
FROM emps e INNER JOIN
     emps m
     ON m.empId = e.repTo 
WHERE e.manager <= (SELECT DISTINCT m2.repTo
                    FROM emps m
                    ORDER BY m2.repTo
                    LIMIT 1 OFFSET 1
                   );