4.1 Mengumpul lajur

Apa yang juga sangat penting ialah jika anda mengumpulkan rekod, maka dalam bahagian SELECTanda hanya boleh menentukan lajur yang mana data dikumpulkan.

awaktak bolehtulis pertanyaan jenis dan nyatakan SELECTlajur nama dalam bahagian :

SELECT brand, name
FROM product
GROUP BY brand

Anda mempunyai sekumpulan baris dalam jadual produk dengan medan nama , dan tidak jelas baris mana yang perlu anda gantikan di sini. Fikirkan sekali lagi: anda ingin mengetahui bilangan produk bagi setiap jenama dan bagaimana jadual yang terhasil boleh mendapatkan nama produk?

Jika anda menggunakan operator GROUP BY, maka baris biasa tidak boleh masuk ke dalam hasil anda, tetapi hanya lajur yang mana data dikumpulkan dan "lajur dikira", sepertiCOUNT(*)

4.2 Pengumpulan mengikut lajur yang dikira

Tetapi anda boleh mengumpulkan mengikut berbilang lajur dan juga mengikut lajur yang dikira. Contoh:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

Dan hasil daripada pertanyaan ini:

upah_tahun jumlah
2012 1
2013 1
2014 1
2015 2
2018 1

Mari analisa permintaan kami.

Dalam jadual pekerja , setiap pekerja mempunyai tarikh pengambilan yang unik, jadi pengumpulan data mengikutnya tidak akan berfungsi - akan ada satu rekod untuk setiap tarikh dan pengumpulan tidak akan masuk akal. Tetapi jika kita beralih dari tarikh pengambilan ke tahun pengambilan pekerja, maka ia mungkin menjadi situasi di mana syarikat mengambil beberapa pekerja pada tahun yang sama.

Mari lihat semula rupa jadual ini sebelum mengumpulkan:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	join_date
FROM employee

Dan hasil daripada pertanyaan ini:

ID nama upah_tahun tarikh menyertai
1 Ivanov Ivan 2012 30-06-2012
2 Petrov Petr 2013 2013-08-12
3 Ivanov Sergey 2014 2014-01-01
4 Rabinovich Moisha 2015 12-05-2015
5 Kirienko Anastasia 2015 2015-10-10
6 Vaska 2018 2018-11-11

Tetapi jadual yang terhasil ini boleh dikumpulkan mengikut hire_year dan mengetahui bilangan orang yang diambil bekerja pada tahun tertentu.

4.3 Pengumpulan mengikut berbilang lajur

Sekarang mari kita cuba untuk mengetahui berapa ramai pekerja yang kami ambil dalam setiap bulan setiap tahun. Untuk melakukan ini, kita perlu menambah bukan satu, tetapi dua medan yang dikira pada pertanyaan sekaligus - tahun sewa (hire_year) dan bulan sewa (hire_month).

Mari tulis pertanyaan seperti ini:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	join_date
FROM employee

Dan hasil daripada pertanyaan ini:

ID nama upah_tahun upah_bulan tarikh menyertai
1 Ivanov Ivan 2012 6 30-06-2012
2 Petrov Petr 2013 8 2013-08-12
3 Ivanov Sergey 2014 1 2014-01-01
4 Rabinovich Moisha 2015 5 12-05-2015
5 Kirienko Anastasia 2015 10 2015-10-10
6 Vaska 2018 sebelas 2018-11-11

Jika kami mengumpulkan data dalam jadual hasil ini mengikut bulan, maka kami hanya mengumpulkan orang ke dalam kumpulan, tanpa mengira tahun mereka diupah. Dan kami memerlukan jadual yang terhasil untuk mempunyai tiga lajur: tahun, bulan dan bilangan pekerja yang diambil bekerja.

Untuk melakukan ini, selepas pengendali, GROUP BYanda perlu menggunakan nama bukan satu lajur, tetapi dua. Contoh:

SELECT
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month

Dan hasil daripada pertanyaan ini:

upah_tahun upah_bulan jumlah
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 sebelas 1

Kami mempunyai sedikit rekod dalam jadual, jadi terdapat unit di mana-mana dalam jumlah lajur. Selain itu, ambil perhatian bahawa lebih banyak lajur yang kami kumpulkan, lebih banyak baris yang kami ada dalam hasilnya.