4.1 Mengumpul lajur
Apa yang juga sangat penting ialah jika anda mengumpulkan rekod, maka dalam bahagian SELECT
anda hanya boleh menentukan lajur yang mana data dikumpulkan.
awaktak bolehtulis pertanyaan jenis dan nyatakan SELECT
lajur 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 BY
anda 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.