Oracle
 sql >> база данни >  >> RDS >> Oracle

sql подреждане по с вътрешна клауза за избор и групиране по събиране

Можеш да направиш нещо подобно. Нямам вашите входни данни, затова използвах SCOTT.EMP вместо това.

Забележете няколко неща. Групирах по JOB и използвах GROUPING(JOB) и двете в SELECT (за да добавите етикета TOTAL за обобщения ред) и в ORDER BY . Тъй като използвам повторно името на колоната JOB в SELECT (за изходната колона), в ORDER BY Трябва да внимавам да квалифицирам името на колоната JOB (за да стане ясно, имам предвид колоната на таблицата за въвеждане, а не колоната в SELECT - което би било по подразбиране, ако имената на колони в ORDER BY не са били квалифицирани). Необходимостта от квалифициране на имена на колони в ORDER BY след това ме принуди да направя псевдоним на таблицата в FROM клауза (в противен случай би трябвало да нося пълното име на таблицата навсякъде).

Използване на GROUPING функция в SELECT (вместо NVL ) е особено важно, ако JOB може да бъде null . Не искате групата за null задание да бъде означено с TOTAL - искате само това за сборния ред. Тази точка обърква дори много много напреднали програмисти.

Показвам как можете "ръчно" да решите реда:PRESIDENT първо, след това MANAGER , и след това всички други задачи (подредени по азбучен ред). Ако сте запазили реда на приоритета някъде, например в таблица, можете да се присъедините към тази таблица и да използвате колоната за подреждане вместо „ръчния“ CASE израз в моята заявка.

select case grouping(job) when 0 then job else 'TOTAL' end as job
     , sum(sal) as total_salary
from   scott.emp e
group  by rollup(job)
order  by grouping(e.job)       -- to get the total in the last row
        , case e.job when 'PRESIDENT' then 1 when 'MANAGER' then 2 end
        , e.job
;

JOB       TOTAL_SALARY
--------- ------------
PRESIDENT         5000
MANAGER           8275
ANALYST           6000
CLERK             4150
SALESMAN          5600
TOTAL            29025



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въз основа на ден на колона, свързан с дата като заглавие

  2. Получаване на грешка при изпълнение на процедурата от sql разработчик

  3. sqlplus - използване на свързваща променлива в IN клауза

  4. Обръщане на низ Word по Word с помощта на SQL

  5. Spring JDBC BeanPropertyRowMapper да не ('Y','N') към булевите свойства на bean