Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

thứ tự sql theo mệnh đề lựa chọn bên trong và nhóm theo cuộn lên

Bạn có thể làm một cái gì đó như thế này. Tôi không có dữ liệu đầu vào của bạn, vì vậy tôi đã sử dụng SCOTT.EMP thay vào đó.

Lưu ý một vài điều. Tôi đã nhóm theo JOB và tôi đã sử dụng GROUPING(JOB) cả trong SELECT (để thêm nhãn TOTAL cho hàng tóm tắt) và trong ORDER BY . Vì tôi sử dụng lại tên cột JOB trong SELECT (đối với cột đầu ra), trong ORDER BY Tôi phải cẩn thận để đủ điều kiện cho tên cột JOB (để làm rõ hơn, tôi đang đề cập đến cột của bảng đầu vào, không phải cột trong SELECT - sẽ là mặc định nếu tên cột trong ORDER BY không đủ điều kiện). Sự cần thiết phải đủ điều kiện cho các tên cột trong ORDER BY , sau đó, buộc tôi phải đặt bí danh cho bảng trong FROM (nếu không, tôi đã phải mang đầy đủ tên bảng ở khắp mọi nơi).

Sử dụng GROUPING chức năng trong SELECT (chứ không phải NVL ) đặc biệt quan trọng nếu JOB có thể là null . Bạn không muốn nhóm cho null công việc được gắn nhãn TOTAL - bạn chỉ muốn điều đó cho hàng cuộn lên. Điểm này gây nhầm lẫn ngay cả với nhiều lập trình viên rất cao cấp.

Tôi chỉ cho bạn cách bạn có thể quyết định đơn hàng "theo cách thủ công":PRESIDENT đầu tiên, sau đó đến MANAGER , và sau đó là tất cả các công việc khác (được sắp xếp theo thứ tự bảng chữ cái). Nếu bạn có thứ tự ưu tiên được lưu ở đâu đó, chẳng hạn như trong một bảng, bạn có thể tham gia vào bảng đó và sử dụng cột thứ tự thay vì "thủ công" CASE biểu thức trong truy vấn của tôi.

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. Khớp các giá trị cột trùng lặp của Oracle bằng cách sử dụng Soundex, Jaro Winkler và Chỉnh sửa Khoảng cách (UTL_MATCH)

  2. Cách chạy Tạo bảng DDL với THỰC HIỆN NGAY LẬP TỨC trong cơ sở dữ liệu Oracle

  3. Tại sao Oracle SQL không cho phép chúng ta sử dụng bí danh cột trong mệnh đề GROUP BY?

  4. ORA-29283:thao tác tệp không hợp lệ ORA-06512:tại SYS.UTL_FILE, dòng 536

  5. pyodbc ngoại lệ args có một số ký tự không xác định