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

Как да използвате клауза HAVING в SQL

В тази статия ще научим за концепцията на клаузата HAVING и как да я използваме в SQL.

Каква е клаузата HAVING?

В езика на структурираните заявки клаузата HAVING, използвана с клауза GROUP BY, определя условията, които филтрират резултатите, появяващи се в изхода. Връща само тези данни от групата, които отговарят на условията.

С клаузата HAVING можем да използваме и клаузата WHERE в заявката. Ако използваме и двете клаузи заедно, клаузата WHERE ще се изпълни първо, където ще филтрира отделните редове, след това редовете се групират и накрая клаузата HAVING филтрира групите.

Условията на клаузата HAVING се поставят след клаузата GROUP BY. Клаузата HAVING се държи по същия начин като клаузата WHERE в езика за структурирани заявки не използва клаузата GROUP BY. Можем да използваме агрегатни функции като MIN, MAX, SUM, AVG и COUNT. Тази функция се използва само с клаузата SELECT и клаузата HAVING.

Синтаксис на клауза HAVING:

SELECT COLUMNS, AGGREGATE FUNCTION, FROM TABLENAME WHERE CONDITION GROUP BY COLUMN HAVING CONDITIONS; 

Има някои стъпки, които трябва да научим за това как да използваме клаузата HAVING в SQL заявката:

1. Създайте нова база данни или използвайте съществуваща база данни, като изберете базата данни с помощта на ключовата дума USE, последвана от името на базата данни.

2. Създайте нова таблица в избраната база данни или можете да използвате вече създадена таблица.

3. Ако таблицата е създадена нова, вмъкнете записите в новосъздадената база данни с помощта на заявката INSERT и прегледайте вмъкнатите данни с помощта на заявката SELECT без клаузата HAVING.

4. Сега сме готови да използваме клаузата HAVING в SQL заявките.

Стъпка 1:Създайте нова база данни или използвайте вече създадена база данни.

Вече създадох база данни. Ще използвам съществуващото си създадено име на база данни.

USE SCHOOL;

School е името на базата данни.

Тези, които не са създали база данни, следвайте заявката по-долу, за да създадете база данни:

CREATE DATABASE database_name;

След като създадете базата данни, изберете я с помощта на ключовата дума USE, последвана от името на базата данни.

Стъпка 2:Създайте нова таблица или използвайте вече съществуваща таблица:

Вече създадох таблица. Ще използвам съществуващата таблица с име Student.

За да създадете новите таблици, следвайте по-долу синтаксис CREATE TABLE:

CREATE TABLE table_name(

columnname1 datatype(column size),

columnname2 datatype(column size),

columnname3 datatype(column size)

);

Стъпка 3:Вмъкнете записите в новосъздадената таблица с помощта на заявката INSERT и прегледайте записите с помощта на заявката SELECT.

Използвайте синтаксиса по-долу, за да вмъкнете нови записи в таблицата:

INSERT INTO table_name VALUES(value1, value2, value3);

За да видите записите от таблицата, като използвате следния синтаксис:

SELECT * FROM table_name;

Следната заявка ще покаже записите на служители

SELECT * FROM Student;

Резултатът от горната заявка SELECT е:

STUDENT_ID STUDENT_NAME PHYSICS_MARKS CHEMISTRY_MARKS MATHS_MARKS ОБЩО_МАРКИ
1 NEHA 85 88 100 273
2 ВИШАЛ 70 90 82 242
3 SAMKEET 75 88 96 259
4 НИХИЛ 60 75 80 215
5 ЙОГЕШ 56 65 78 199
6 АНКИТА 95 85 96 276
7 SONAM 98 89 100 287
8 ВИНЕЕТ 85 90 100 275
9 SANKET 86 78 65 229
10 PRACHI 90 80 75 245

Стъпка 4:Готови сме да използваме клаузата HAVING в езика за структурирани заявки.

Сега ще се потопим дълбоко в клаузата HAVING с помощта на примери.

Имаме таблица с име Student, която съдържа следните записи.

STUDENT_ID STUDENT_NAME PHYSICS_MARKS CHEMISTRY_MARKS MATHS_MARKS ОБЩО_МАРКИ
1 NEHA 85 88 100 273
2 ВИШАЛ 70 90 82 242
3 SAMKEET 75 88 96 259
4 НИХИЛ 60 75 80 215
5 ЙОГЕШ 56 65 78 199
6 АНКИТА 95 85 96 276
7 SONAM 98 89 100 287
8 ВИНЕЕТ 85 90 100 275
9 SANKET 86 78 65 229
10 PRACHI 90 80 75 245

Пример 1: Напишете заявка за показване на сумата от оценките по физика, където сборът на точките по физика е по-голям от 60 групи по идентификационен номер на ученик.

SELECT STUDENT_ID, STUDENT_NAME, SUM(PHYSICS_MARKS) AS PHYSICS_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING SUM(PHYSICS_MARKS) > 60;

В горната заявка сме взели агрегатна функция с име SUM(), последвана от име на колона physics_marks, която ще сумира колоната. Първо се изпълнява Sum(physics_marks), след това условието на клауза HAVING се изпълнява в края и крайният резултат ще бъде показан. Използвахме клаузата GROUP BY, последвана от името на колоната Student_Id, за да групираме същите стойности и да ги считаме за една група. Ако стойностите не са еднакви, няма да се формира група за стойности. И накрая, ние използвахме клаузата HAVING, където поставяме условието, което ще помогне да се покажат само онези подробности за учениците, при които сумата от оценките по физика е по-голяма от 60. Ако оценките по физика на учениците са по-малки от 60, то няма да покаже записи.

Резултатът от горната заявка е:

STUDENT_ID STUDENT_NAME PHYSICS_MARKS
1 NEHA 85
2 ВИШАЛ 70
3 SAMKEET 75
6 АНКИТА 95
7 SONAM 98
8 ВИНЕЕТ 85
9 SANKET 86
10 PRACHI 90

Както можем да видим в изхода, се показват само онези студентски идентификационни номера, имена и оценки по физика, където сумата от оценките по физика е по-голяма от 60. Тъй като използвахме клауза GROUP BY и няма подобни стойности, те се броят като една група .

Пример 2: Напишете заявка за показване на максималните оценки по химия, когато максималният бал по химия е по-малък от 90 групи по идентификационен номер на ученик.

SELECT STUDENT_ID, STUDENT_NAME, MAX(CHEMISTRY_MARKS) AS CHEMISTRY_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING MAX(CHEMISTRY_MARKS) < 90;  

В горната заявка сме взели агрегатна функция с име MAX(), последвана от име на колона chemistry_marks, която ще намери максималните знаци на колоната. Използвахме клаузата GROUP BY, последвана от името на колоната Student_Id, за да групираме същите стойности и да ги считаме за една група. Ако стойностите не са еднакви, тогава ще се формира отделна група за стойности. И накрая, ние използвахме клаузата HAVING, където поставяме условието, което ще помогне да се покажат само онези подробности за учениците, при които максималният бал по химия е по-малък от 90. Ако оценките по химия на учениците са по-големи от 90, това няма да показване на записите. Първо, MAX(chemistry_marks) се изпълнява, след това условието на клаузата HAVING се изпълнява в края и крайният резултат ще бъде показан. Резултатът от горната заявка е:

STUDENT_ID STUDENT_NAME CHEMISTRY_MARKS
1 NEHA 88
3 SAMKEET 88
4 НИХИЛ 75
5 ЙОГЕШ 65
6 АНКИТА 85
7 SONAM 89
9 SANKET 78
10 PRACHI 80

Както можем да видим в изхода, се показват само онези студентски идентификатори, имена и оценки по химия, където максималният бал по химия е по-малък от 90. Тъй като използвахме клауза GROUP BY и няма подобни стойности, те се броят като единична група.

Пример 3: Напишете заявка за показване на оценките по математика, когато минималната оценка по математика е по-голяма от 70 групи по идентификационен номер на ученик.

SELECT STUDENT_ID, STUDENT_NAME, MIN(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING MIN(MATHS_MARKS) >70;

В горната заявка сме взели агрегатна функция с име MIN(), последвана от име на колона maths_marks, която ще намери минималните знаци на колоната. Използвахме клаузата GROUP BY, последвана от името на колоната Student_Id, за да групираме същите стойности и да ги считаме за една група. Ако стойностите не са еднакви, тогава ще се формира отделна група за стойности. И накрая, ние използвахме клаузата HAVING, където поставяме условието, което ще помогне да се покажат само онези подробности за учениците, при които минималната оценка по математика е по-голяма от 70. Ако оценките по математика на ученика са по-малки от 70, това няма да показване на записите. Първо, MIN(maths_marks) се изпълнява, след това условието на клаузата HAVING се изпълнява в края и крайният резултат ще бъде показан.

Резултатът от горната заявка е:

STUDENT_ID STUDENT_NAME MATHS_MARKS
1 NEHA 100
2 ВИШАЛ 82
3 SAMKEET 96
4 НИХИЛ 80
5 ЙОГЕШ 78
6 АНКИТА 96
7 SONAM 100
8 ВИНЕЕТ 100
10 PRACHI 75

Както можем да видим в изхода, се показват само онези студентски идентификатори, имена и оценки по математика, при които минималната оценка по математика е по-голяма от 70. Тъй като използвахме клауза GROUP BY и няма подобни стойности, те се броят като единична група.

Пример 4: Напишете заявка за показване на подробности за учениците, където минималните оценки по физика са по-големи от 56, а максималните оценки по математика са по-малки от 98.

SELECT STUDENT_ID, STUDENT_NAME, MIN(PHYSICS_MARKS) AS PHYSICS_MARKS , MAX(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MIN(PHYSICS_MARKS) >58 AND MAX(MATHS_MARKS)<98;

Използвахме двойни агрегатни функции в единична заявка min() и max() в горната заявка. Min() се използва за намиране на минималните оценки по физика, а Max() се използва за откриване на максималните оценки по математика. Първо, заявката ще намери знаците min() и max() по физика и математика от таблицата на учениците. Тъй като използвахме клауза GROUP BY, така че подобни стойности са картографирани като една група, в противен случай стойностите ще бъдат като отделни. Тъй като в таблицата няма сходни стойности, всички стойности са разделени. Няма стойности да бъдат картографирани като една група. След това използвахме клаузата HAVING, която работи като разлика в клаузата WHERE само клаузата HAVING, преобразувана в групата. Първо, условието е MIN(PHYSICS_MARKS)> 58. Тъй като няма сходни стойности, всяка стойност ще се счита за минимална стойност и в сравнение с условието се използва същият подход за MAX(MATHS_MARKS). Тъй като използвахме оператор И в заявката, тези условия отговарят и на двете условия. Само записите на тези ученици се показват в крайния резултат.

Резултатът от горната заявка е:

STUDENT_ID STUDENT_NAME PHYSICS_MARKS MATHS_MARKS
2 ВИШАЛ 70 82
3 SAMKEET 75 96
4 НИХИЛ 60 80
6 АНКИТА 95 96
9 SANKET 86 65
10 PRACHI 90 75

Както можем да видим в изхода, се показват само онези студентски записи, при които минималните оценки по физика са по-големи от 56, А максималните оценки по математика са по-малки от 98.

В горния пример, ако се използва оператор OR вместо оператор AND, тогава всичките десет записа се показват, защото операторът OR казва, че ако едно условие е неуспешно и други условия са верни, тогава записите в таблицата отговарят на условията.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързани сървъри на Salesforce.com и sp_columns_ex

  2. Проследяване на сигнали с модел на данни за обработка на сигнали

  3. NextForm v3:Пет опции за миграция на данни и бази данни

  4. Как да нулирате главната потребителска парола на Amazon RDS

  5. Проблемът с изгубената актуализация при едновременни транзакции