sql >> Database teknologi >  >> RDS >> Oracle

sql orden efter med en indre select-klausul og grupper efter oprulning

Du kunne gøre sådan noget. Jeg har ikke dine inputdata, så jeg brugte SCOTT.EMP i stedet.

Læg mærke til et par ting. Jeg grupperede efter JOB , og jeg brugte GROUPING(JOB) begge i SELECT (for at tilføje etiketten TOTAL for oversigtsrækken) og i ORDER BY . Da jeg genbruger kolonnenavnet JOB i SELECT (for outputkolonnen), i ORDER BY Jeg skal være omhyggelig med at kvalificere kolonnenavnet JOB (for at gøre det klart henviser jeg til inputtabelkolonnen, ikke til kolonnen i SELECT - hvilket ville være standard, hvis kolonnenavne i ORDER BY ikke var kvalificerede). Behovet for at kvalificere kolonnenavne i ORDER BY tvang mig derefter til at kalde tabellen i FROM klausul (ellers ville jeg have været nødt til at bære det fulde tabelnavn overalt).

Brug af GROUPING funktion i SELECT (i stedet for NVL ) er især vigtig, hvis JOB kan være null . Du vil ikke have gruppen til null job skal mærkes TOTAL - det vil du kun have til rollup-rækken. Dette punkt forvirrer selv mange meget avancerede programmører.

Jeg viser, hvordan du "manuelt" kan bestemme rækkefølgen:PRESIDENT først, derefter MANAGER , og derefter alle andre job (ordnet alfabetisk). Hvis du har prioritetsrækkefølgen gemt et sted, for eksempel i en tabel, kan du tilslutte dig den tabel og bruge bestillingskolonnen i stedet for den "manuelle" CASE udtryk i min forespørgsel.

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. rekursiv cte med rangeringsfunktioner

  2. Når du gemmer en datetime i sql server (datetime type), hvilket format gemmer den den i?

  3. Hvordan fungerer SQL Server Wildcard Character Range, f.eks. [A-D], med store og små bogstaver?

  4. Deltag i operationsduplikering