Све што требате знати о СКЛ ГРОУП БИ изјави

Све што требате знати о СКЛ ГРОУП БИ изјави

Велики део моћи релационих база података долази од филтрирања података и спајања табела заједно. Због тога ми и представљамо те односе. Али савремени системи база података пружају још једну вредну технику: груписање.





Груписање вам омогућава да извучете збирне информације из базе података. Омогућава вам да комбинујете резултате за креирање корисних статистичких података. Груписање вас штеди од писања кода за уобичајене случајеве, као што је усредњавање листа цифара. И то може учинити ефикасније системе.





Чему служи клаузула ГРОУП БИ?

ГРОУП БИ, као што име говори, групише резултате у мањи скуп. Резултати се састоје од једног реда за сваку засебну вредност груписане колоне. Његову употребу можемо показати ако погледамо неке узорке података са редовима који деле неке заједничке вредности.





каквог овна користи мој лаптоп

Следи врло једноставна база података са две табеле које представљају албуме плоча. Такву базу података можете поставити тако што ћете писање основне шеме за изабрани систем базе података. Тхе албуми Табела има девет редова са примарним кључем ид колона и колоне за име, извођача, годину издавања и продају:

+----+---------------------------+-----------+--------------+-------+
| id | name | artist_id | release_year | sales |
+----+---------------------------+-----------+--------------+-------+
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | The Dark Side of the Moon | 2 | 1973 | 24 |
| 3 | Rumours | 3 | 1977 | 28 |
| 4 | Nevermind | 4 | 1991 | 17 |
| 5 | Animals | 2 | 1977 | 6 |
| 6 | Goodbye Yellow Brick Road | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Bat Out of Hell | 7 | 1977 | 28 |
+----+---------------------------+-----------+--------------+-------+

Тхе уметници сто је још једноставнији. Има седам редова са колонама ид и име:



+----+---------------+
| id | name |
+----+---------------+
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Meat Loaf |
+----+---------------+

Можете разумети различите аспекте ГРОУП БИ помоћу једноставног скупа података попут овог. Наравно, скуп података из стварног живота имао би много, много више редова, али принципи остају исти.

Груписање по једној колони

Рецимо да желимо да сазнамо колико албума имамо за сваког извођача. Почните са типичним СЕЛЕЦТ упит за преузимање колоне артист_ид:





SELECT artist_id FROM albums

Ово враћа свих девет редова, очекивано:

+-----------+
| artist_id |
+-----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
+-----------+

Додајте фразу да бисте груписали ове резултате према извођачу ГРОУП БИ артист_ид :





SELECT artist_id FROM albums GROUP BY artist_id

Што даје следеће резултате:

+-----------+
| artist_id |
+-----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
+-----------+

У скупу резултата налази се седам редова, умањено од укупно девет у албуми сто. Сваки јединствен артист_ид има један ред. На крају, да бисте добили стварне бројеве, додајте ЦОУНТ (*) до изабраних колона:

SELECT artist_id, COUNT(*)
FROM albums
GROUP BY artist_id
+-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+-----------+----------+

Резултати групишу два пара редова за уметнике са идентификационим бројевима 2 и 6 . Сваки има два албума у ​​нашој бази података.

Повезан: Основне СКЛ наредбе Цхеат Схеет за почетнике

Како приступити груписаним подацима са збирном функцијом

Можда сте користили ЦОУНТ функцију раније, посебно у ЦОУНТ (*) облик као што се види горе. Дохваћа број резултата у скупу. Помоћу њега можете добити укупан број записа у табели:

SELECT COUNT(*) FROM albums
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+

ЦОУНТ је збирна функција. Овај израз се односи на функције које преводе вредности из више редова у једну вредност. Често се користе заједно са изразом ГРОУП БИ.

Уместо да само бројимо редове, можемо применити збирну функцију на груписане вредности:

SELECT artist_id, SUM(sales)
FROM albums
GROUP BY artist_id
+-----------+------------+
| artist_id | SUM(sales) |
+-----------+------------+
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+-----------+------------+

Горе приказана укупна продаја уметника 2 и 6 заједно је продаја њихових више албума:

SELECT artist_id, sales
FROM albums
WHERE artist_id IN (2, 6)
+-----------+-------+
| artist_id | sales |
+-----------+-------+
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+-----------+-------+

Груписање по више колона

Можете груписати по више колона. Само додајте више колона или израза, одвојених зарезима. Резултати ће се груписати према комбинацији ових колона.

SELECT release_year, sales, count(*)
FROM albums
GROUP BY release_year, sales

Ово обично даје више резултата него груписање по једној колони:

+--------------+-------+----------+
| release_year | sales | count(*) |
+--------------+-------+----------+
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
+--------------+-------+----------+

Имајте на уму да, у нашем малом примеру, само два албума имају исту годину издавања и број продаја (28 1977.).

Корисне збирне функције

Осим ЦОУНТ, неколико функција добро функционише са ГРОУП. Свака функција враћа вредност на основу записа који припадају свакој групи резултата.

  • ЦОУНТ () враћа укупан број одговарајућих записа.
  • СУМ () враћа збир свих вредности у датој колони.
  • МИН () враћа најмању вредност у датој колони.
  • МАКС () враћа највећу вредност у датој колони.
  • АВГ () враћа средњи просек. То је еквивалент СУМ () / ЦОУНТ ().

Ове функције можете користити и без клаузуле ГРОУП:

како одблокирати некога са гмаила
SELECT AVG(sales) FROM albums
+------------+
| AVG(sales) |
+------------+
| 19.1111 |
+------------+

Коришћење ГРОУП БИ са одредбом ВХЕРЕ

Као и код нормалног СЕЛЕЦТ -а, и даље можете користити ВХЕРЕ за филтрирање скупа резултата:

SELECT artist_id, COUNT(*)
FROM albums
WHERE release_year > 1990
GROUP BY artist_id
+-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 4 | 1 |
| 6 | 2 |
+-----------+----------+

Сада имате само оне албуме објављене након 1990. године, груписане по извођачима. Такође можете користити придруживање са клаузулом ВХЕРЕ, независно од ГРОУП БИ:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
+---------+--------+
| name | albums |
+---------+--------+
| Nirvana | 1 |
| Adele | 2 |
+---------+--------+

Имајте на уму, међутим, да ако покушате да филтрирате на основу збирне колоне:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND albums > 2
GROUP BY artist_id;

Добићете грешку:

ERROR 1054 (42S22): Unknown column 'albums' in 'where clause'

Колоне засноване на збирним подацима нису доступне у клаузули ВХЕРЕ.

Коришћење ХАВИНГ клаузуле

Дакле, како филтрирате скуп резултата након груписања? Тхе ХАВИНГ клаузула се бави овом потребом:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
GROUP BY artist_id
HAVING albums > 1;

Имајте на уму да клаузула ХАВИНГ долази иза ГРОУП БИ. Иначе, то је у суштини једноставна замена ВХЕРЕ са ХАВИНГ. Резултати су следећи:

+------------+--------+
| name | albums |
+------------+--------+
| Pink Floyd | 2 |
| Adele | 2 |
+------------+--------+

И даље можете користити услов ВХЕРЕ за филтрирање резултата пре груписања. Радиће заједно са ХАВИНГ клаузулом за филтрирање након груписања:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
HAVING albums > 1;

Само један извођач у нашој бази података објавио је више од једног албума након 1990. године:

+-------+--------+
| name | albums |
+-------+--------+
| Adele | 2 |
+-------+--------+

Комбиновање резултата са ГРОУП БИ

Наредба ГРОУП БИ је невероватно користан део СКЛ језика. Може да пружи сумарне информације о подацима, на пример за страницу са садржајем. Одлична је алтернатива за преузимање великих количина података. База података добро подноси ово додатно оптерећење јер га сам дизајн чини оптималним за посао.

Када схватите груписање и како се придружити више табела, моћи ћете да искористите већину снаге релационе базе података.

Објави Објави Твеет Емаил Како одједном затражити више табела базе података помоћу СКЛ придруживања

Научите како да користите СКЛ придруживања за поједностављивање упита, уштедите време и учините да се осећате као снажан корисник СКЛ -а.

Виндовс 10 трепћући екран не може учинити ништа
Прочитајте следеће Повезане теме
  • Програмирање
  • СКЛ
О аутору Бобби Јацк(Објављено 58 чланака)

Бобби је ентузијаст технологије који је скоро две деценије радио као програмер софтвера. Одушевљен је играњем игара, ради као уредник рецензија у магазину Свитцх Плаиер, и уроњен је у све аспекте издаваштва на мрежи и веб развоја.

Више од Боббија Јацка

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили