0

I have a table department with 3 column(department_name , department_id, department_block_number) so I want to fetch the department_block_number in which maximum number of department is located ? I have two department_block_number 303, 202 and each has 4 and 2 departments respectively? how can i do it?

select q1.department_block_number , max(c)
(select department_block_number , count(department_id)as c from department group by department_block_number)q1,
group by department_block_number ;

select q1.department_block_number , max(c)
(select department_block_number , count(department_id)as c from department group by department_block_number)q1,
group by department_block_number ;

Now i want to show only 303 as it is the block number with maximum departments in it but my query is showing both 303, 202 please help me . If you know some other way so that i can fetch the result so please help

APC
  • 144,005
  • 19
  • 170
  • 281

1 Answers1

1

In standard SQL if you are looking for one row, you would do:

select d.department_block_number, count(*)
from department d
group by d.department_block_number
order by count(*) desc
fetch first 1 row only;

Some databases spell fetch first 1 row only as limit 1 or select top (1) or in even more arcane ways.

In older versions of Oracle (fetch is supported in 12c+), you can do:

select department_block_number, cnt
from (select d.department_block_number, count(*) as cnt
      from department d
      group by d.department_block_number
      order by count(*) desc
     ) d
where rownum = 1;
Gordon Linoff
  • 1,242,037
  • 58
  • 646
  • 786