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

GROUP BY / объркване на агрегатната функция в SQL

В стандартния SQL (но не MySQL), когато използвате GROUP BY, трябва да изброите всички колони с резултати, които не са агрегати в клаузата GROUP BY. Така че, ако order_details има 6 колони, тогава трябва да изброите всички 6 колони (по име - не можете да използвате * в клаузите GROUP BY или ORDER BY) в клаузата GROUP BY.

Можете също да направите:

SELECT order_no, SUM(order_price)
  FROM order_details
 GROUP BY order_no;

Това ще работи, защото всички неагрегирани колони са изброени в клаузата GROUP BY.

Можете да направите нещо като:

SELECT order_no, order_price, MAX(order_item)
  FROM order_details
 GROUP BY order_no, order_price;

Тази заявка не е наистина смислена (или най-вероятно няма смисъл), но ще „работи“. Той ще изброява всеки отделен номер на поръчка и комбинация от цена на поръчката и ще даде максималния артикул (номер) на поръчката, свързан с тази цена. Ако всички артикули в една поръчка имат различни цени, ще получите групи от по един ред всеки. OTOH, ако има няколко артикула в поръчката на една и съща цена (да речем £0,99 всеки), тогава той ще ги групира заедно и ще върне максималния номер на артикула за поръчка на тази цена. (Предполагам, че таблицата има първичен ключ на (order_no, order_item) където първият елемент в поръчката има order_item = 1 , вторият елемент е 2 и т.н.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. какво се случва във фазата на прекъсване на adop в R12.2

  2. Не е валиден месец при вмъкване на данни в oracle

  3. Oracle - ORA-06502:PL/SQL:числова или стойностна грешка (DBMS_OUTPUT)

  4. Препращане към типовете, дефинирани от потребителя на Oracle, през DBLINK?

  5. Вмъкване в Oracle и извличане на генерирания ID на последователност