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

Еквивалент на клауза GroupBy и Having в релационна алгебра

Отбелязвайки, че искате да получите сумата на заплатата, в Урок D :

SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )

Забележете, че агрегирането не е релационен оператор, следователно няма да бъде част от релационна алгебра.

Що се отнася до HAVING , историческа аномалия ли е. Преди стандарта SQL-92 не беше възможно да се напише SELECT изрази в FROM клауза (известна още като производни таблици), т.е. трябваше да свършите цялата работа в един SELECT изразяване. Поради строгия ред на оценка на SQL, обобщената стойност не възниква след WHERE клаузата е оценена, т.е. невъзможно е да се приложи ограничение въз основа на агрегирани стойности. HAVING беше въведена за справяне с този проблем.

Но дори и с HAVING , SQL остана относително непълен по отношение на Codd, докато не бяха въведени производни таблици. Производни таблици, изобразени HAVING излишен, но използващ HAVING все още е популярен (ако Stackoverflow е нещо, което трябва да се използва):хората все още изглежда обичат да използват един SELECT където е възможно и гореспоменатата твърдост на SQL по отношение на реда на оценките (прожектирането се извършва последно в SELECT израз) прави използването на извлечена таблица доста многословно в сравнение с HAVING .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо SQLSTATE[HY000]:Обща грешка?

  2. как да оптимизирате тази заявка (включени са 4 mm таблици)

  3. Laravel 'не можа да намери драйвер (SQL:вмъкване в...'

  4. Еквивалент на RowID на Oracle в MySQL

  5. Многоезични заглавия на категории в Mysql база данни