关于分组查询的sql语句求解
我的表及数据如下:
id mc zw
1 张三 科长
2 张三 科长
3 张三 科长
4 张三 科长
5 张三 科长
6 张三 科长
7 张三 科长
8 张三 科长
9 李四 科员
10 李四 科员
11 李四 科员
12 明明 科员
13 明明 科员
14 明明 科员
15 明明 科员
16 明明 科员
17 明明 科员
18 红红 副科长
其中有8行数据是张三,6行数据是明明,3行数据是李四,1行数据是红红
请问如何找到有最多行数的前两位,就是张三以及明明的所有数据。要求最后结果如下:
id mc zw
1 张三 科长
2 张三 科长
3 张三 科长
4 张三 科长
5 张三 科长
6 张三 科长
7 张三 科长
8 张三 科长
12 明明 科员
13 明明 科员
14 明明 科员
15 明明 科员
16 明明 科员
17 明明 科员
------解决方案--------------------不对
select * from [Table] where mc in
(select mc from
(select top 2 mc,count(1) from [Table] group by mc order by count(1) desc) a
)
------解决方案--------------------set nocount on
declare @a table(id int,F1 varchar(10), F2 varchar(10))
insert @a select 1 , '张三 ', ' 科长 '
union all select 2 , '张三 ', '科长 '
union all select 3 , '张三 ', '科长 '
union all select 4 , '张三 ', '科长 '
union all select 5 , '张三 ', '科长 '
union all select 6 , '张三 ', '科长 '
union all select 7 , '张三 ', '科长 '
union all select 8 , '张三 ', '科长 '
union all select 9 , '李四 ', '科员 '
union all select 10 , '李四 ', '科员 '
union all select 11 , '李四 ', '科员 '
union all select 12 , '明明 ', '科员 '
union all select 13 , '明明 ', '科员 '
union all select 14 , '明明 ', '科员 '
union all select 15 , '明明 ', '科员 '
union all select 16 , '明明 ', '科员 '
union all selec