【问题标题】:mysql order by with top four or three or two group rows based on inputmysql 根据输入按前四或三或两组行排序
【发布时间】:2020-09-14 04:15:53
【问题描述】:

选择 fname AS 'manager', lname AS 'DR' FROM emps e INNER JOIN 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 号经理详细信息?

两个经理详细信息意味着它应该返回如下

 manager1    repor1
 manager1    repor2
 manager1    repor3
 manager2    repor4
 manager2    repor5

【问题讨论】:

标签: mysql sql join select greatest-n-per-group


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。它返回每个经理的前两条记录。经理1 报告1 经理1 报告2 经理2 报告4 经理2 报告5 经理3 报告6 经理3 报告7 经理4 报告9 经理4 报告11 我想要两个经理详细信息
【解决方案2】:

1.

```select * from table_name A where manager in
(select distinct TOP 2 manager from table_name B  order by manager Asc)```

2.

```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```

【讨论】:

    【解决方案3】:

    不清楚您想要订购什么。如果 id 有效,那么:

    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
                       );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      相关资源
      最近更新 更多