Skip to Main Content
  • Questions
  • Need to Know the process & result of my question

Breadcrumb

Question and Answer

Connor McDonald

Thanks for the question, pankaj.

Asked: January 07, 2017 - 4:40 am UTC

Last updated: January 08, 2017 - 11:52 am UTC

Version: oracle 11g

Viewed 1000+ times

You Asked

Emp, dept table is present for reference


SQL> select * from dept;

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

SQL> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10

Q.Write a query to display distinct 'job' & their counts & then display the no. of distinct 'dept no' under each 'job' & their counts.

(i have to show the result through a procedure)

and Connor said...

There's a bit of ambiguity in your second question, but here's some things to get you started

SQL> select job, count(*)
  2  from scott.emp
  3  group by job
  4  order by 1;

JOB         COUNT(*)
--------- ----------
ANALYST            2
CLERK              4
MANAGER            3
PRESIDENT          1
SALESMAN           4

5 rows selected.

SQL>
SQL> select job, count(distinct deptno), count(*)
  2  from scott.emp
  3  group by job
  4  order by 1;

JOB       COUNT(DISTINCTDEPTNO)   COUNT(*)
--------- --------------------- ----------
ANALYST                       1          2
CLERK                         3          4
MANAGER                       3          3
PRESIDENT                     1          1
SALESMAN                      1          4

5 rows selected.

SQL>
SQL> select job, deptno, count(*)
  2  from scott.emp
  3  group by job,deptno
  4  order by 1,2;

JOB           DEPTNO   COUNT(*)
--------- ---------- ----------
ANALYST           20          2
CLERK             10          1
CLERK             20          2
CLERK             30          1
MANAGER           10          1
MANAGER           20          1
MANAGER           30          1
PRESIDENT         10          1
SALESMAN          30          4

9 rows selected.


In order to put that in a PLSQL procedure, for each SQL you can do

set serverout on
begin
  for i in ( "yoursql" )
  loop   
    dbms_output.put_line(  "attributes" ); 
  end loop;
end;
/

Rating

  (1 rating)

Is this answer out of date? If it is, please let us know via a Comment

Comments

Grouping Sets

Rajeshwaran Jeyabal, January 09, 2017 - 6:20 am UTC

Rather than two sql's, we could do that single a single pass using "Grouping sets"
demo@ORA12C> select job,deptno,count(*) as tot_cnt,
  2            count(distinct deptno) as dept_cnt
  3  from emp
  4  group by grouping sets( (deptno,job),(job) )
  5  order by job, deptno nulls last ;

JOB           DEPTNO    TOT_CNT   DEPT_CNT
--------- ---------- ---------- ----------
ANALYST           20          2          1
ANALYST                       2          1
CLERK             10          1          1
CLERK             20          2          1
CLERK             30          1          1
CLERK                         4          3
MANAGER           10          1          1
MANAGER           20          1          1
MANAGER           30          1          1
MANAGER                       3          3
PRESIDENT         10          1          1
PRESIDENT                     1          1
SALESMAN          30          4          1
SALESMAN                      4          1

14 rows selected.

demo@ORA12C>

More to Explore

PL/SQL demos

Check out more PL/SQL tutorials on our LiveSQL tool.

PL/SQL docs

PL/SQL reference manual from the Oracle documentation library