Π Π°Π·Π½ΠΎΠ΅

Group by ΠΏΠΎ Π΄Π²ΡƒΠΌ полям: Как Π² Π΄Π°Π½Π½ΠΎΠΉ ситуации ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ GROUP BY ΠΏΠΎ Π΄Π²ΡƒΠΌ полям? | PHPClub

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ нСскольким столбцам

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ нСскольким столбцам

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ°
ΠΏΠΎ нСскольким столбцам

Π’ прСдлоТСниях GROUP BY ΠΌΠΎΠΆΠ½ΠΎ
ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ столбцов, сколько Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, раздСляя ΠΈΠΌΠ΅Π½Π°
элСмСнты
списка запятыми. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡƒΡ‚Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ
нСскольким
элСмСнтам ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΈΠ· списка
GROUP
BY Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² спискС Π²Ρ‹Π±ΠΎΡ€Π° β€”
Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами,
Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΡ‹Π΅ элСмСнты.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

SQL:


SELECT region, sex, COUNT(*) AS num_clients


FROM tbl_clients


GROUP BY
region, sex

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:





































































region sex num_clients
California f 18
California m 15
Los Angeles f 42
Los Angeles m 57
New Jersey f 12
New Jersey m 21
New York f 15
New York m 18
Oregon f 15
Oregon m 18
Portland f 12
Portland m 32
Seattle f 37
Seattle m 40
Washington f 21
Washington m 11


Π‘Π½Π°Ρ‡Π°Π»Π° строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ
ΠΏΠΎ Π³ΠΎΡ€ΠΎΠ΄Π°ΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ каТдая получСнная Π³Ρ€ΡƒΠΏΠΏΠ° раздСляСтся ΠΏΠΎ ΠΏΠΎΠ»Ρƒ
ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’
Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся 16 Π³Ρ€ΡƒΠΏΠΏ, ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠ². ПослС этого ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ
Ρ‚Π°ΠΊΠΎΠΌΡƒ
Π½Π°Π±ΠΎΡ€Ρƒ примСняСтся Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ функция, которая вычисляСт для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ
Π³ΠΎΡ€ΠΎΠ΄Π°
количСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ТСнского ΠΈ муТского ΠΏΠΎΠ»Π°.

Команда GROUP BY — Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Команда GROUP BY позволяСт Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅
ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

К сгруппированным Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
(смотритС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹).

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ HAVING,
которая позволяСт Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ условиС Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹, созданныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GROUP BY.

Бинтаксис

SELECT * FROM имя_Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ WHERE условиС GROUP BY ΠΏΠΎΠ»Π΅_для_Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎ этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ workers, Ссли Π½Π΅ сказано ΠΈΠ½ΠΎΠ΅:

id
Π°ΠΉΠ΄ΠΈ
name
имя
age
возраст
salary
Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
1Π”ΠΈΠΌΠ°23100
2ΠŸΠ΅Ρ‚Ρ23200
3Вася23300
4Коля241000
5Иван242000
6ΠšΠΈΡ€ΠΈΠ»Π»251000

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ записи Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ возрасту (Π±ΡƒΠ΄Π΅Ρ‚ 3 Π³Ρ€ΡƒΠΏΠΏΡ‹ — 23 Π³ΠΎΠ΄Π°, 24 Π³ΠΎΠ΄Π° ΠΈ 25 Π»Π΅Ρ‚).
Π—Π°Ρ‚Π΅ΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ примСняСтся функция SUM,
которая суммируСт Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏ (23 Π³ΠΎΠ΄Π°, 24 Π³ΠΎΠ΄Π° ΠΈ 25 Π»Π΅Ρ‚) Π±ΡƒΠ΄Π΅Ρ‚ подсчитана суммарная
Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ этой Π³Ρ€ΡƒΠΏΠΏΡ‹:

SELECT age, SUM(salary) as sum FROM workers GROUP BY age

SQL запрос Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

age
возраст
sum
сумма
23600
243000
251000

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ условиС WHERE,
Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π·ΡΡ‚ΡŒ Π½Π΅ всС записи ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

SELECT age, SUM(salary) as sum FROM workers WHERE id>=2 GROUP BY age

SQL запрос Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

age
возраст
sum
сумма
23500
243000
251000

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ записи Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ возрасту (Π±ΡƒΠ΄Π΅Ρ‚ 3 Π³Ρ€ΡƒΠΏΠΏΡ‹ — 23 Π³ΠΎΠ΄Π°, 24 Π³ΠΎΠ΄Π° ΠΈ 25 Π»Π΅Ρ‚).
Π—Π°Ρ‚Π΅ΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ примСняСтся функция MAX,
которая Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹:

SELECT age, MAX(salary) as max FROM workers GROUP BY age

SQL запрос Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

age
возраст
max
максимальная Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
23300
242000
251000

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MIN
найдСтся минимальная Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹:

SELECT age, MIN(salary) as min FROM workers GROUP BY age

SQL запрос Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

age
возраст
min
минимальная Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°
23100
241000
251000

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ COUNT
найдСтся количСство записСй Π² Π³Ρ€ΡƒΠΏΠΏΠ΅:

SELECT age, COUNT(*) as count FROM workers GROUP BY age

SQL запрос Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

age
возраст
count
количСство
233
242
251

GROUP BY ΠΏΠΎ Π΄Π²ΡƒΠΌ полям (MySQL)

GANJAR

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΅ΡΡ‚ΡŒ поля email ΠΈ email_rec.
Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ GROUP BY Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Ρ‹Π» количСством записСй ΠΈΠ· Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
Ρ‚ΠΈΠΏΠ°:

email — email_rec
email_rec — email

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎ 2-ΠΌ полям Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ°.
Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ ΠΊΠ°ΠΊ входящиС Ρ‚Π°ΠΊ ΠΈ исходящиС сообщСния. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд показалось всС довольно просто, Π° сСйчас ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 5Ρ‚ΠΈ Ρ‡. И Π½ΠΈ Π² ΠΊΠ°ΠΊΡƒΡŽβ€¦
Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΎ (1). Π•ΡΡ‚ΡŒ 2 поля: ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ. НуТно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство записСй входящих ΠΈ исходящих сообщСний.
Π’ΠΎ Π΅ΡΡ‚ΡŒ
-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ записи ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ [email protected] Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ [email protected]
-Π²Ρ‚ΠΎΡ€ΠΎΠΉ — ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ [email protected] Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ [email protected]
Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ подсчитаны COUNT(*) AS ‘count_msg’
А ΠΊΠ°ΠΊ сам запрос Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ я Π±Π΅Π· понятия…
Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΎ (2). |277|21|21|0|0|[email protected]| | |etsets|1297930874|1|0| |[email protected]|1
|387|21|21|0|103241|[email protected]|Π‘ΠΎΠ³Π΄Π°Π½| |qweqwe|1298387575|1|1| |[email protected]|1
|402|21|21|0|103241|[email protected]|Π‘ΠΎΠ³Π΄Π°Π½| |tsetseet|1298455480|1|0| |[email protected]|1

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ получится 2 ΠΈ 1
ΠŸΠΎΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ 3 строка Π² ΠΏΠΎΠ»Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ содСрТит Π΄Ρ€ΡƒΠ³ΠΎΠΉ email
Π“Ρ€ΡƒΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ 2ΠΌ полям ΠΊΠΎΠ³Π΄Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.
Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΎ (3). Psevdonim, Ρ‚Π°ΠΊ я ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΈ сдСлал сначала, Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ Ρ‚ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ. МнС Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ исходящиС Ρ‚Π°ΠΊ ΠΈ входящиС сообщСния. А Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ 2ΠΌ полям даст лишь подсчСт Π»ΠΈΠ±ΠΎ входящих Π»ΠΈΠ±ΠΎ исходящих. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎ входящих сообщСниях email отправитСля = email получатСля, Π² исходящих соотвСтствСнно Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π’ этом ΠΈ вся ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ
Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΎ (4). РСшСниС Π½Π°ΠΉΠ΄Π΅Π½ΠΎ.
GROUP BY IF(’email’=»‘.$mail_acc[’email’].'», ’email_rec’, ’email’)
Бпасибо всСм ΠΎΡ‚ΠΏΠΈΡΠ°Π²ΡˆΠΈΠΌΡΡ.

Π˜Π³ΠΎΡ€ΡN

Если я ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ понял, Ρ‚ΠΎ Ρƒ тСбя с Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ получится Ρ‚ΠΎ количСство записСй ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΅ΡΡ‚ΡŒ Π² Π±Π°Π·Π΅ ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Ρ€ΡƒΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚, Ρ‚Π΅Π±Π΅ Π½Π°Π΄ΠΎ Π΄Π²Π° запроса ΠΏΠΈΡΠ°Ρ‚ΡŒ

Иван Π“ΠΎΠ²Π½ΠΎ

Π― Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ понял.

upd. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΈΡΡŒΠΌΡƒ соотвСтсвуСт Π΄Π²Π΅ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅?
ВсС Ρ€Π°Π²Π½ΠΎ Π½Π΅ понятно. Π”Π°Π²Π°ΠΉ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Бписок писСм, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅.

Psevdonim

SELECT count(*) AS ‘count_msg’, email, email_rec
FROM
GROUP BY email, email_rec
;

Π’ Ρ‡Ρ‘ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹-Ρ‚ΠΎ?

Transact-SQL Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… GROUP BY | Info-Comp.ru

ΠœΡ‹ с Π’Π°ΠΌΠΈ рассмотрСли ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΏΠΎ SQL, Π² частности Transact-SQL, Π½ΠΎ ΠΌΡ‹ Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π»ΠΈ Ρ‚Π°ΠΊΡƒΡŽ, Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ ΠΊΠ°ΠΊ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… GROUP BY. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сСгодня ΠΌΡ‹ научимся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ group by для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

МногиС Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ программисты, ΠΊΠΎΠ³Π΄Π° ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с SQL, Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΎ Ρ‚Π°ΠΊΠΎΠΉ возмоТности ΠΊΠ°ΠΊ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° GROUP BY, хотя эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ трСбуСтся достаточно часто Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Π² связи с этим наш сСгодняшний ΡƒΡ€ΠΎΠΊ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ, посвящСн ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π’Π°ΠΌ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π»Π΅Π³Ρ‡Π΅ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π’Ρ‹ с этим ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ. Если Π’Π°ΠΌ интСрСсна Ρ‚Π΅ΠΌΠ° SQL, Ρ‚ΠΎ ΠΌΡ‹, ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ сказал Ρ€Π°Π½Π΅Π΅, Π½Π΅ Ρ€Π°Π· Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π»ΠΈ Π΅Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΡΡ‚Π°Ρ‚ΡŒΡΡ… Π―Π·Ρ‹ΠΊ SQL – объСдинСниС JOIN ΠΈΠ»ΠΈ ОбъСдинСниС Union ΠΈ union all , поэтому ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ ΠΈ с этим ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ.

И для вступлСния нСбольшая тСория.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ GROUP BY

GROUP BY – это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (ΠΈΠ»ΠΈ конструкция, ΠΊΠΎΠΌΡƒ ΠΊΠ°ΠΊ ΡƒΠ΄ΠΎΠ±Π½Π΅ΠΉ) SQL для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ полю, ΠΏΡ€ΠΈ использовании Π² запросС Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ sum, max, min, count ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ….

Как Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ sum суммируСт всС значСния. А Π²ΠΎΡ‚ допустим, Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΈΠ»ΠΈ сразу ΠΏΠΎ нСскольким условиям, ΠΈΠΌΠ΅Π½Π½ΠΎ для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ group by, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ полям с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Как ΠΌΠ½Π΅ каТСтся, нагляднСй Π±ΡƒΠ΄Π΅Ρ‚ это всС Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅! ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Management Studio SQL сСрвСра 2008.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° GROUP BY

И для Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ наши запросы select с использованиСм Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ group by. Π’Π°Π±Π»ΠΈΡ†Π° ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π²Ρ‹Π΄ΡƒΠΌΠ°Π½Π½Ρ‹Π΅, чисто для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

   
   CREATE TABLE [dbo].[test_table](
        [id] [int] NULL,
        [name] [varchar](50) NULL,
        [summa] [money] NULL,
        [priz] [int] NULL
   ) ON [PRIMARY]
   GO


Π― Π΅Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

Π“Π΄Π΅,

  • Id –идСнтификатор записи;
  • Name – фамилия сотрудника;
  • Summa- Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Π΅ срСдства;
  • Priz – ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств (допустим 1- Оклад; 2-ΠŸΡ€Π΅ΠΌΠΈΡ).

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ запроса group by

И Π² самом Π½Π°Ρ‡Π°Π»Π΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ синтаксис group by, Ρ‚.Π΅. Π³Π΄Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

Бинтаксис:

Select Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

From источник

Where Условия ΠΎΡ‚Π±ΠΎΡ€Π°

Group by поля Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ

Having Условия ΠΏΠΎ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹ΠΌ функциям


Order by поля сортировки

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ссли Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Π΅ срСдства Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ сотрудника Π±Π΅Π· использования Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΡ‹ пошлСм Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ запрос:

   
   SELECT SUM(summa)as summa 
   FROM test_table 
   WHERE name='Иванов'


А Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ сотрудника, Ρ‚ΠΎ ΠΌΡ‹ просто мСняСм условиС. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Ссли Ρ‚Π°ΠΊΠΈΡ… сотрудников ΠΌΠ½ΠΎΠ³ΠΎ, Π·Π°Ρ‡Π΅ΠΌ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ, Π΄Π° ΠΈ это ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π½Π΅ наглядно, поэтому Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ group by. ПишСм запрос:

   
   SELECT SUM(summa)as summa, name 
   FROM test_table 
   GROUP BY name


Как Π’Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, ΠΌΡ‹ Π½Π΅ пишСм Π½ΠΈΠΊΠ°ΠΊΠΈΡ… условий, ΠΈ Ρƒ нас ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ сразу всС сотрудники с просуммированным количСством Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ наглядно.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅! Π‘Ρ€Π°Π·Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ, сколько ΠΏΠΎΠ»Π΅ΠΉ ΠΌΡ‹ пишСм Π² запросС (Ρ‚.Π΅. поля Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ), ΠΏΠΎΠΌΠΈΠΌΠΎ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ΠΌΡ‹ пишСм Π² конструкции group by. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅, поэтому Π² group by ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ (name), Ссли Π±Ρ‹ ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»ΠΈ нСсколько ΠΏΠΎΠ»Π΅ΠΉ, Ρ‚ΠΎ ΠΈΡ… всС ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² конструкции group by (Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π’Ρ‹ это ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅).

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сколько Ρ€Π°Π· поступали Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Π΅ срСдства Ρ‚ΠΎΠΌΡƒ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌΡƒ сотруднику с ΠΎΠ±Ρ‰Π΅ΠΉ суммой ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΡ… срСдств. Для этого ΠΌΡ‹ ΠΊΡ€ΠΎΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sum Π±ΡƒΠ΄Π΅ΠΌ Π΅Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ count.

   
   SELECT SUM(summa)as [ВсСго Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств], 
          COUNT(*) as [ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ поступлСний], 
          Name [Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ] 
   FROM test_table 
   GROUP BY name


Но допустим для Π½Π°Ρ‡Π°Π»ΡŒΡΡ‚Π²Π° этого нСдостаточно, ΠΎΠ½ΠΈ Π΅Ρ‰Π΅ просят, ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅, Π½ΠΎ Π΅Ρ‰Π΅ с Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΏΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΡƒ, Ρ‚.Π΅. Ρ‡Ρ‚ΠΎ это Π·Π° Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Π΅ срСдства (ΠΎΠΊΠ»Π°Π΄ ΠΈΠ»ΠΈ прСмия), для этого ΠΌΡ‹ просто добавляСм Π² Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΡƒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅, ΠΈ для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ восприятия Π΄ΠΎΠ±Π°Π²ΠΈΠΌ сортировку ΠΏΠΎ сотруднику, ΠΈ получится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

   
   SELECT  SUM(summa)as [ВсСго Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств], 
           COUNT(*) as [ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ поступлСний], 
           Name [Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ] ,
           Priz [Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ]
    FROM test_table 
    GROUP BY name, priz
    ORDER BY name


Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас всС отобраТаСтся, Ρ‚.Π΅. сколько Π΄Π΅Π½Π΅Π³ поступило сотруднику, сколько Ρ€Π°Π·, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ источника.

А сСйчас для закрСплСния Π΄Π°Π²Π°ΠΉΡ‚Π΅ напишСм Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ слоТный запрос с Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ, Π½ΠΎ Π΅Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ названия этого источника, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° Π½Π΅ понятно ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ источника поступили срСдства. Для этого ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ case.

   
   SELECT SUM(summa) AS [ВсСго Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств], 
          COUNT(*) AS [ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ поступлСний], 
          Name [Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ],
          CASE WHEN priz = 1 then 'Оклад' 
               WHEN priz = 2 then 'ΠŸΡ€Π΅ΠΌΠΈΡ' 
               ELSE 'Π‘Π΅Π· источника' 
          END AS [Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ]
     FROM test_table 
     GROUP BY name, priz
     ORDER BY name


Π’ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ всС достаточно наглядно ΠΈ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ слоТно, Π΄Π°ΠΆΠ΅ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ….

Π’Π°ΠΊΠΆΠ΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅ΠΌ условия ΠΏΠΎ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (having). Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΌΡ‹ добавляСм условиС Π½Π΅ ΠΏΠΎ ΠΎΡ‚Π±ΠΎΡ€Ρƒ самих строк, Π° ΡƒΠΆΠ΅ Π½Π° ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π² нашСм случаС это sum ΠΈΠ»ΠΈ count. НапримСр, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ вывСсти всС Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ…, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… «всСго Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств» большС 200. Для этого Π΄ΠΎΠ±Π°Π²ΠΈΠΌ условиС having:

    
   SELECT SUM(summa)as [ВсСго Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств], 
           COUNT(*) as [ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ поступлСний], 
           Name [Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ],
           CASE WHEN priz = 1 then 'Оклад' 
                WHEN priz = 2 then 'ΠŸΡ€Π΅ΠΌΠΈΡ' 
                ELSE 'Π‘Π΅Π· источника' 
           END AS [Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ]
     FROM test_table 
     GROUP BY name, priz --Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅ΠΌ
     HAVING SUM(summa) > 200 --ΠΎΡ‚Π±ΠΈΡ€Π°Π΅ΠΌ
     ORDER BY name -- сортируСм


Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π²Ρ‹Π²Π΅Π»ΠΈΡΡŒ всС значСния sum(summa), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ большС 200, всС просто.

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°! Для ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ изучСния языка T-SQL Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠΎΠΈ видСокурсы ΠΏΠΎ T-SQL.

НадСюсь, послС сСгодняшнСго ΡƒΡ€ΠΎΠΊΠ° Π’Π°ΠΌ стало понятно, ΠΊΠ°ΠΊ ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ group by. Π£Π΄Π°Ρ‡ΠΈ! А SQL ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ….

Нравится2НС нравится

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° записСй

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° записСй

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° записСй

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ GROUP BY Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ позволяСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ записи Π‘Π”
слоя Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹. Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° записСй ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ значСниям ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…
ΠΏΠΎΠ»Π΅ΠΉ записСй, Π»ΠΈΠ±ΠΎ Π½Π° основании Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ столбцов Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ конструкции: GROUP BY
<поля Π΄Π°Π½Π½Ρ‹Ρ…>|<Π½ΠΎΠΌΠ΅Ρ€Π° столбцов>. ΠŸΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ
Π΄Π°Π½Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° выполняСтся ΠΏΠΎ полям Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ссли ΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° столбцов — Ρ‚ΠΎ ΠΏΠΎ
Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌ столбцов Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (нумСрация столбцов начинаСтся с 1).

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ конструкция GROUP BY размСщаСтся нСпосрСдствСнно
послС конструкции WHERE, ΠΏΠ΅Ρ€Π΅Π΄ HAVING ΠΈ
ORDER.

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° записСй всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совмСстно с Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ функциями. Π’ Ρ‚Π°ΠΊΠΎΠΌ
случаС Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ записСй. НапримСр, ΠΏΡ€ΠΈ
Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ΅ записСй слоя Здания ΠΏΠΎ полю Π£Π»ΠΈΡ†Π°, всС
записи Π‘Π” слоя Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Π½Π° нСсколько Π³Ρ€ΡƒΠΏΠΏ, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ записи с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΡƒΠ»ΠΈΡ†Π΅ΠΉ.
И, ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ COUNT Π² Ρ‚Π°ΠΊΠΎΠΌ запросС, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ
количСство записСй Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅.

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ нСскольким полям (столбцам). Поля
(столбцы) Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ, послС слов GROUP BY.
Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° сначала выполняСтся ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ полю, Π·Π°Ρ‚Π΅ΠΌ, ΡƒΠΆΠ΅ сгруппированныС записи
Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ полю ΠΈ Ρ‚.Π΄.

ΠŸΡ€ΠΈ использовании Π² запросС Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ, срСди Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… столбцов Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚
Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ поля записСй ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ выполняСтся Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ°, Π»ΠΈΠ±ΠΎ
выраТСния Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ эти поля.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ
записСй

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ полю Π΄Π°Π½Π½Ρ‹Ρ…

SELECT Π£Π»ΠΈΡ†Π°, COUNT(*) FROM Здания GROUP BY Π£Π»ΠΈΡ†Π°

Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список ΡƒΠ»ΠΈΡ† ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡƒΠ»ΠΈΡ†Ρ‹ количСства записСй.

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ столбца

SELECT FLOOR(Area/10)*10, SUM(Area) FROM Здания GROUP BY 1

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ записи ΠΏΠΎ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ Π΄ΠΎΠΌΠΎΠ² (с шагом 10, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ с 0 Π΄ΠΎ 10, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ с
10 Π΄ΠΎ 20 ΠΈ Ρ‚.Π΄.) ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список Π³Ρ€ΡƒΠΏΠΏ ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ ΡΡƒΠΌΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹.

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ нСскольким полям

SELECT COUNT(*) FROM Здания GROUP BY ΠšΠ²Π°Ρ€Ρ‚Π°Π», Π£Π»ΠΈΡ†Π°

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ записи ΠΏΠΎ ΠΊΠ²Π°Ρ€Ρ‚Π°Π»Π°ΠΌ, Π° Π² ΠΊΠ²Π°Ρ€Ρ‚Π°Π»Π°Ρ… ΠΏΠΎ ΡƒΠ»ΠΈΡ†Π°ΠΌ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ количСство записСй для
ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠΏΡ‹.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ GROUP BY

ВрСмя прочтСния: 3 ΠΌΠΈΠ½.

Для Π½Π°Ρ‡Π°Π»Π° вспомним Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ GROUP BY. Π˜Ρ‚Π°ΠΊ, GROUP BY – конструкция, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² SQL для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ полю ΠΏΡ€ΠΈ использовании Π² запросС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SUM, MAX, MIN ΠΈ Π΄.Ρ€.) Π»ΠΈΠ±ΠΎ для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ дублирования строк (ΠΊΠ°ΠΊ эквивалСнт ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова DISTINCT).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΆΠ΅ рассмотрим Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ GROUP BY, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈΡ‚ΠΎΠ³ΠΈ ΠΈ ΠΈΡ‚ΠΎΠ³ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ β€” ROLLUP, CUBE ΠΈ GROUPING SETS. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

CREATE TABLE #tmp
(
[eployee] nvarchar(10), --сотрудник
[department] nvarchar(10), --ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅
[work_year] int, --Π³ΠΎΠ΄
[annual_income] money –доход
)

НачнСм с ROLLUP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Ρ€Π½Π΅Ρ‚ Π½Π°ΠΌ ΠΎΠ±Ρ‰ΡƒΡŽ ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ строку. НапримСр, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сколько сотрудников Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΈ ΠΈΡ… Π΄ΠΎΡ…ΠΎΠ΄ Π·Π° всС врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹. Для этого напишСм простой запрос:

SELECT
	[department]
	,COUNT(DISTINCT [eployee]) as employess_count
	,SUM([annual_income]) as common_income
FROM #tmp
GROUP BY [department]

А Ссли Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΎΠ±Ρ‰Π΅Π΅ количСство сотрудников ΠΈ ΠΈΡ… совокупный Π΄ΠΎΡ…ΠΎΠ΄? Π’ΡƒΡ‚ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ ROLLUP.

SELECT
	[department]
	,COUNT(DISTINCT [eployee]) as employess_count
	,SUM([annual_income]) as common_income
FROM #tmp
GROUP BY ROLLUP([department])

Π’Π°ΠΊΠΆΠ΅ ROLLUP Π½Π°ΠΌ пригодится, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΈΡ‚ΠΎΠ³ с Π΄ΠΎΡ…ΠΎΠ΄ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сотрудника Π·Π° всС врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹.

SELECT
	[eployee]
	,[work_year]
	,SUM([annual_income]) as common_income
FROM #tmp
GROUP BY ROLLUP([eployee],[work_year])

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ красными стрСлками, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈΡ‚ΠΎΠ³ΠΎΠΌ ΠΏΠΎ сотруднику Π·Π° всС Π΅Π³ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΌΠΈ – общая ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰Π°Ρ строка.

Β Β Β Β Β Β Β Β Β Β Β  Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ β€” CUBE. Он ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ROLLUP ΠΏΠΎ Π΄Π²ΡƒΠΌ столбцам ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π° Ρ‚Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ CUBE добавляСт ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ строки для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π³Ρ€ΡƒΠΏΠΏ.

SELECT
	[eployee]
	,[work_year]
	,SUM([annual_income]) as common_income
FROM #tmp
GROUP BY CUBE([eployee],[work_year])

Π’ нашСм случаС красными стрСлками ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΈΡ‚ΠΎΠ³ΠΈ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π³ΠΎΠ΄Ρƒ для всСх сотрудников, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² этом Π³ΠΎΠ΄Ρƒ, синими – ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΈΡ‚ΠΎΠ³ΠΈ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ сотруднику Π·Π° всС врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΌΠΈ – общая ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰Π°Ρ строка, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ использовании ROLLUP.

Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ строки для Π³Ρ€ΡƒΠΏΠΏ? ΠžΡ‚Π²Π΅Ρ‚ Π½Π° этот вопрос – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GROUPING SETS. Он, ΠΊΠ°ΠΊ ΠΈ ROLLUP ΠΈ CUBE, добавляСт ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ строку для Π³Ρ€ΡƒΠΏΠΏ, Π½ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ сами Π³Ρ€ΡƒΠΏΠΏΡ‹.

SELECT
	[eployee]
	,[work_year]
	,SUM([annual_income]) as common_income
FROM #tmp
GROUP BY GROUPING SETS([eployee],[work_year])

Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния CUBE, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈΡ‚ΠΎΠ³ΠΈ ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΡ‚ΠΎΠ³.

ΠžΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ конструкции GROUP BY ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π»Π΅Π³ΠΊΠΎ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΈΡ‚ΠΎΠ³ΠΈ, Π½Π΅ прибСгая ΠΊ использованию подзапросов ΠΈ облСгчая ΠΊΠΎΠ΄.

SQL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ GROUP BY β€” Oracle PL/SQL β€’MySQL β€’MariaDB β€’SQL Server β€’SQLite

Π’ этом ΡƒΡ‡Π΅Π±Π½ΠΎΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ SQL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ GROUP BY с синтаксисом ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ.

ОписаниС

SQL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ GROUP BY ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ SELECT для сбора Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ нСскольким записям ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким столбцам.

Бинтаксис

Бинтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° GROUP BY Π² SQL:

SELECT expression1, expression2, … expression_n,
aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, … expression_n
[ORDER BY expression [ ASC | DESC ]];

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

expression1, expression2, … expression_n
ВыраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ инкапсулированы Π² Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² GROUP BY Π² ΠΊΠΎΠ½Ρ†Π΅ SQL-запроса.
aggregate_function
Π­Ρ‚ΠΎ агрСгатная функция, такая ΠΊΠ°ΠΊ SUM, COUNT, MIN, MAX ΠΈΠ»ΠΈ AVG.
aggregate_expression
Π­Ρ‚ΠΎ столбСц ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ aggregate_function.
tables
Π’Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ записи. Π’ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ FROM Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° хотя Π±Ρ‹ ΠΎΠ΄Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°.
WHERE conditions
ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. Π­Ρ‚ΠΎ условия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ для Π²Ρ‹Π±ΠΎΡ€Π° записСй.
ORDER BY expression
ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ для сортировки записСй Π² Π½Π°Π±ΠΎΡ€Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². Если ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ выраТСния, значСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ запятыми.
ASC
ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. ASC сортируСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Π² порядкС возрастания ΠΏΠΎ expression. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½.
DESC
ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. DESC сортируСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Π² порядкС убывания ΠΏΠΎ expression.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” использованиС GROUP BY с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ SUM

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GROUP BY с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ SUM Π² SQL.
Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° employees со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

employee_numberfirst_namelast_namesalarydept_id
1001JustinBieber62000500
1002SelenaGomez57500500
1003MilaKunis71000501
1004TomCruise42000501

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ SQL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€:

SELECT dept_id,
SUM(salary) AS total_salaries
FROM employees
GROUP BY dept_id;

SELECT dept_id,

Β Β Β Β Β Β  SUM(salary) AS total_salaries

Β Β FROM employees

GROUP BY dept_id;

Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ 2 записи. Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅:

dept_idtotal_salaries
500119500
501113000

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ использовали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SUM, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ всС Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ dept_id, ΠΈ ΠΌΡ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ SUM(salary) ΡƒΠΊΠ°Π·Π°Π»ΠΈ псСвдоним Β«total_salariesΒ». ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ dept_id Π½Π΅ инкапсулирован Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SUM, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ GROUP BY.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” использованиС GROUP BY с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ COUNT

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ GROUP BY с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ COUNT Π² SQL.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° products со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

product_idproduct_namecategory_id
1Pear50
2Banana50
3Orange50
4Apple50
5Bread75
6Sliced Ham25
7KleenexNULL

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ SQL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€:

SELECT category_id,
COUNT(*) AS total_products
FROM products
WHERE category_id IS NOT NULL
GROUP BY category_id
ORDER BY category_id;

SELECT category_id,

Β Β  COUNT(*) AS total_products

Β Β FROM products

WHERE category_id IS NOT NULL

GROUP BY category_id

ORDER BY category_id;

Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ 3 записи. Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ:

category_idtotal_products
251
504
751

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ использовали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ COUNT для вычислСния количСства total_products для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ category_id, ΠΈ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ псСвдоним Β«total_productsΒ» ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ COUNT. ΠœΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ всС значСния category_id, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL, ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π² ΠΈΡ… Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ WHERE. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ category_id Π½Π΅ инкапсулирован Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ COUNT, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ GROUP BY.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” использованиС GROUP BY с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ MIN

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ GROUP BY с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ MIN Π² SQL.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ снова Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ employees со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

employee_numberfirst_namelast_namesalarydept_id
1001JustinBieber62000500
1002SelenaGomez57500500
1003MilaKunis71000501
1004TomCruise42000501

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ SQL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€:

SELECT dept_id,
MIN(salary) AS lowest_salary
FROM employees
GROUP BY dept_id;

SELECT dept_id,

Β Β Β Β Β Β  MIN(salary) AS lowest_salary

Β Β FROM employees

GROUP BY dept_id;

Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ 2 записи. Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅:

dept_idlowest_salary
50057500
50142000

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ использовали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ MIN, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ самоС минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ salary для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ dept_id, ΠΈ ΠΌΡ‹ присвоили Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MIN псСвдоним Β«lowest_salaryΒ». ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ dept_id Π½Π΅ инкапсулирован Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ MIN, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ GROUP BY.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” использованиС GROUP BY с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ MAX

НаконСц, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ GROUP BY с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ MAX.

Π”Π°Π²Π°ΠΉΡ‚Π΅ снова Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ employees, Π½ΠΎ Π½Π° этот Ρ€Π°Π· Π½Π°ΠΉΠ΄Π΅ΠΌ ΡΠ°ΠΌΡƒΡŽ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ dept_id:

employee_numberfirst_namelast_namesalarydept_id
1001JustinBieber62000500
1002SelenaGomez57500500
1003MilaKunis71000501
1004TomCruise42000501

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ SQL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€:

SELECT dept_id,
MAX(salary) AS highest_salary
FROM employees
GROUP BY dept_id;

SELECT dept_id,

Β Β  MAX(salary) AS highest_salary

Β Β FROM employees

GROUP BY dept_id;

Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ 2 записи. Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ:

dept_idhighest_salary
50062000
50171000

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ использовали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ MAX, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ самоС максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ salary для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ dept_id, ΠΈ ΠΌΡ‹ присвоили псСвдоним Β«highest_salaryΒ» Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MAX. Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† dept_id Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ GROUP BY, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ инкапсулирован Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MAX.

Как Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π΄Π²ΡƒΠΌ полям Π² кристалличСских ΠΎΡ‚Ρ‡Π΅Ρ‚Π°Ρ…

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

.

java — ElasticSearch — Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ Π΄Π²ΡƒΠΌ Ρ€Π°Π·Π½Ρ‹ΠΌ полям

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

  6. О компании

Загрузка…

  1. ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ
    Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ

  2. Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ сообщСство

    .

    MongoDB Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ нСскольким полям с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ агрСгирования

    Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

    Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я познакомлю вас с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ Mongodb ΠΏΠΎ нСскольким полям. Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, сначала ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ агрСгирования.

    Ѐункция агрСгирования MongoDB

    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ агрСгирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² прСдлоТСниях GROUP BY для агрСгирования сгруппированных Π΄Π°Π½Π½Ρ‹Ρ…. АгрСгатныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΈ использовании с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ GROUP BY. Однако использованиС Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ограничиваСтся сгруппированными запросами.

    Когда агрСгатная функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² запросС Π±Π΅Π· прСдлоТСния GROUP BY, агрСгатная функция Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ вСсь Π½Π°Π±ΠΎΡ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² (всС строки, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ WHERE). Если Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ GROUP BY, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² спискС SELECT ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹ΠΌΠΈ функциями. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ агрСгатная функция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ GROUP BY для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ списку Π² спискС SELECT.

    НапримСр, вмСсто использования прСдлоТСния GROUP BY, AVG Π² спискС SELECT ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ SUM, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ столбцу.

    ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ агрСгирования MongoDB ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ коллСкция сгруппирована ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, выполняСтся ряд ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ сумма, срСднСС ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ агрСгирования ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ слоТныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сбора, особСнно для матСматичСской статистики ΠΈ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ….

    Π’Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ агрСгирования Π² MongoDB являСтся Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². MongoDB ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ агрСгирования, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€ΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ:

    • Π’Ρ€ΡƒΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ
    • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ агрСгирования для ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ использования
    • МодСль программирования MapReduce

    Π“Ρ€ΡƒΠΏΠΏΠ° Mongodb ΠΏΠΎ нСскольким полям

    ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ $ group — это Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Π£ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ свой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ символу $ + ΠΈΠΌΠ΅Π½ΠΈ поля.
    Π§Ρ‚ΠΎΠ±Ρ‹ сначала ΠΏΠΎΠ½ΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ MongoDB ΠΏΠΎ нСскольким полям, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° список всСх ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² $ group:

    • $ sum — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму всСх числовых ΠΏΠΎΠ»Π΅ΠΉ.
    • $ avg — вычисляСт срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ числовыми полями.
    • $ min — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· числового поля
    • $ max — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· числового поля.
    • $ push — вставляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля Π² ΠΏΠΎΠ»Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°
    • $ addToSet — ВставляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массив ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π½ΠΎ Π½Π΅ создаСт Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ².
    • $ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ — ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ· сгруппированных, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для сортировки.
    • $ last — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ послСдний Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

    Π’Ρ€ΡƒΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ

    Π’ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ POSIX сущСствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠΌ, ΠΏΠΎΡ‚ΠΎΠΊ элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выполняСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ порядкС.ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ состоит ΠΈΠ· этапа. ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° ΠΎΠ΄Π½ΠΎΠΌ этапС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап.

    Ѐункция ΠΏΠΎΠ»ΠΈΠΌΠ΅Ρ€Π½ΠΎΠΉ Ρ‚Ρ€ΡƒΠ±ΠΊΠΈ
    ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ критСриям.
    ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

    ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² этапа, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ этапа ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ выраТСния для вычислСния суммы, срСднСго, ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Ρ‹Π²ΠΎΠ² строк ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ.Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ возвращаСтся Π² ΠΊΠΎΠ½Ρ†Π΅, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ вывСсти ΠΈΠ»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

    ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

    • Db.collection.aggregate () ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
    • Db.collection.aggregate () ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ собствСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ MongoDB для эффСктивного агрСгирования ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ GroupBy Π² SQL, Π±Π΅Π· нСобходимости написания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ JS.
    • КаТдая Ρ„Π°Π·Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ 100 ΠœΠ‘ памяти.Если ΠΎΠ΄Π½ΠΎΡƒΠ·Π»ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, MongoDB Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ большиС ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, установитС для свойства allowDiskUse Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ памяти Π² 100 ΠœΠ‘.
    • Db.collection.aggregate () ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ сСрии срСзов, Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ потСрян Π² сСрии срСзов. MapReduce ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ сСрии Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ потСрян Π² сСрии Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ².
    • Db.collection.aggregate () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ курсор, Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² памяти ΠΈ ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊΠ°ΠΊ MongoShell.
    • Π’Ρ‹Π²ΠΎΠ΄ db.collection.aggregate () ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сохранСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° BSON ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ 16 ΠœΠ‘.

    ΠœΠ΅Ρ‚ΠΎΠ΄ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ

    ИспользованиС Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ использованию прСдлоТСния GROUP BY Π² SQL. Π“Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

    • ΠšΠ»ΡŽΡ‡: ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ Π³Ρ€ΡƒΠΏΠΏΡ‹
    • ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ: ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π³Ρ€ΡƒΠΏΠΏΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²
    • Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ: функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ количСство элСмСнтов.Π­Ρ‚Π° функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ совокупного Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹.
    • Keyf: Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, для прСдставлСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
    • Cond: Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ условиС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ истину, ΠΈΠ½Π°Ρ‡Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ΅. Если этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, всС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ΅.
    • Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ: Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.Π­Ρ‚ΠΎ прСдставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая запускаСтся ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ сгруппированного Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

    НапримСр:
    ` js
    > db.users.group ({key: {name: true}, Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅: {total: 0},
    ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ: функция (curr, res) {res.total + = 1}})
    `

    Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π³Ρ€ΡƒΠΏΠΏΠ° Π±ΡƒΠ΄Π΅Ρ‚ сгруппирована ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ: key: {name: true}

    Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ поля, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ для Π³Ρ€ΡƒΠΏΠΏΡ‹.Π’ этом случаС устанавливаСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ поля. Π’ этом ΠΏΠΎΠ»Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ количСство элСмСнтов Π² Π³Ρ€ΡƒΠΏΠΏΠ΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ элСмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ, ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

    ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ reduce прСдставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ curr ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ res прСдставляСт Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ. Если Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ для поля ΠΈΠΌΠ΅Π½ΠΈ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ этот Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ ΠΎΠ±Ρ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ res Π½Π° 1.

    ИспользованиС Π³Ρ€ΡƒΠΏΠΏΡ‹ $

    $ group ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ _id для указания ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»ΡŽΡ‡Π° для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ с использованиСм статистики настраиваСмого поля.ИспользованиС Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ проясняСт ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Π³Ρ€ΡƒΠΏΠΏΡ‹ Mongodb ΠΏΠΎ нСскольким полям.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39

    db.users.совокупный ({
    $ match: {age: {$ gte: 18}}
    }, {
    $ group: {_id: $ username, count: {$ sum: 1}}
    });

    // Π“Ρ€ΡƒΠΏΠΏΠ° Mongodb ΠΏΠΎ нСскольким полям
    db.users.aggregate ({
    $ match: {age: {$ gte: 18}}},
    $ group: {_id: {username: $ username, age: $ ge} , ‘count’: {$ sum: 1}}
    })

    // $ sum: val Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚
    // $ avg: val Π‘Ρ€Π΅Π΄Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°
    db.users.aggregate ({
    $ group: {_id: $ username, count: {$ avg: $ age}}
    })

    Π΄Π±.users.aggregate ({
    $ group: {_id: $ username, count: {$ max: $ age}}
    })

    db.users.aggregate ({
    $ group: {_id: $ username, count: { $ min: $ age}}
    })

    // $ first: val Π‘Ρ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅
    db.users.aggregate ({
    $ group: {_ id: $ username, count: {$ first: $ age} }
    })
    db.users.aggregate ({
    $ group: {_ id: $ username, count: {$ last: $ age}}
    })
    db.users.aggregate ({
    $ group: {_id: $ username, count: {$ addToSet: $ age}}
    })
    db.users.aggregate ({
    $ group: {_ id: $ username, count: {$ push: $ age}}
    })

    Π“Ρ€ΡƒΠΏΠΏΠ° Mongodb ΠΏΠΎ нСскольким полям с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ агрСгирования

    Π‘Π½Π°Ρ‡Π°Π»Π° выбираСтся ΠΊΠ»ΡŽΡ‡, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ основано Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ коллСкция дСлится Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ Π² соотвСтствии с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π°. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, объСдинив Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅.

    Π“Ρ€ΡƒΠΏΠΏΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ кластСры ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ сСгмСнтов.Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° распрСдСлСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ aggregate ΠΈΠ»ΠΈ mapReduce.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    db.collection.group (Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚)
    {
    key: {key1, key2: 1},
    # Условия запроса
    cond: {},
    # АгрСгатная функция
    reduce: function (current, result) {},
    # initialization
    initial: {},
    # Counting Return Function Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ
    finalize: function () {}
    }

    ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ количСство элСмСнтов Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ столбцС

    1
    2
    3
    4
    5
    6
    7
    8
    9

    ВЫБРАВЬ Π‘Π§Π•Π’ (*) Π˜Π— Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² GROUP BY category_id;
    Π΄Π‘.goods.group ({
    key: {category_id: 1},
    cond: {}, // всС вмСстС
    reduce: function (current, result) {// БоотвСтствуСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строкС , result БоотвСтствуСт нСскольким строкам Π² Π³Ρ€ΡƒΠΏΠΏΠ΅
    result.total + = 1;
    },
    initial: {total: 0}
    })

    Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

    Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ написана для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ Mongodb ΠΏΠΎ нСскольким полям с использованиСм Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ ΠΏΠΎΡΠ΅Ρ‰Π°Ρ‚ΡŒ Object Rocket для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… статСй, связанных с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

    Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ совСт ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π°ΠΌ Π² Object Rocket.

    .

    oracle — SQL: ΠΊΠ°ΠΊ Π½Π°ΠΉΡ‚ΠΈ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ Π½Π° основС Π΄Π²ΡƒΡ… ΠΏΠΎΠ»Π΅ΠΉ?

    ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

    1. Около
    2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

    3. Для ΠΊΠΎΠΌΠ°Π½Π΄
    1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
      ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

    2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
      Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

    3. Вакансии
      ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

    4. Π’Π°Π»Π°Π½Ρ‚
      НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

    5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
      ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

    6. О компании

    Загрузка…

    .

    Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

    Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *