Dalam mysql, anda boleh menggunakan pernyataan SELECT dengan fungsi SUM() dan "GROUP BY" untuk menjumlahkan kumpulan Sintaks ialah "SELECT query field SUM (summation field) AS field FROM table name WHERE condition GROUP. OLEH Mengelompokkan medan satu, mengelompokkan medan dua;".
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi mysql8.0.22, komputer Dell G3.
Dalam mysql, anda boleh menggunakan
SELECT 查询字段 SUM(求和字段) AS 字段 FROM 表名 WHERE 条件 GROUP BY 分组字段一,分组字段二;
untuk melaksanakan jumlah kumpulan.
Contohnya seperti berikut:
1) count() mencari bilangan baris dalam lajur tertentu
Ia mudah difahami, dikira (nama lajur) adalah untuk mencari bilangan baris dalam lajur tertentu Bilangan baris dalam lajur Perlu diingat bahawa lajur ini tidak mengira bilangan baris dengan nilai nol. Contoh:
>-- Tanya berapa ramai guru yang ada
>-- Tanya berapa baris yang terdapat dalam jadual guru PILIH KIRAAN(*) DARI guru;
Jika terdapat nilai pendua dalam lajur, kami mengira dan tidak mahu mengira nilai pendua, apa yang patut kita buat? Kita boleh menggunakan berbeza untuk menyelesaikan:
-- 查询成绩表里共有几个学生的成绩 SELECT COUNT(DISTINCT 学号) FROM score;
2) sum() menjumlahkan lajur data
jumlah , yang adalah untuk menjumlahkan nilai lajur tertentu, dan hanya boleh mengira nilai. Contoh:
-- 对所有成绩求和 SELECT SUM(成绩) FROM score;
3) purata() nilai purata dalam lajur
Begitu juga, pengiraan purata Hanya nilai berangka boleh dikira:
-- 对所有成绩求平均值 SELECT AVG(成绩) FROM score;
4) max() mencari nilai maksimum lajur data tertentu, min( ) mencari nilai minimum lajur data tertentu Nilai
-- 获取所有成绩中的最大成绩 SELECT MAX(成绩),MIN(成绩) FROM score;
Dalam soalan itu, kami menyebut bahawa kami perlu tahu purata markah setiap subjek, maka kita perlu buat Group.
Dalam SQL, kumpulan mengikut pernyataan boleh mengumpulkan set hasil mengikut satu atau lebih lajur. Contoh:
-- 计算每一科课程的平均成绩 SELECT 课程号,AVG(成绩) FROM score GROUP BY 课程号;
Dalam artikel sebelumnya, kami secara ringkas memperkenalkan tertib pelaksanaan pernyataan SQL: pertama jalankan daripada Jadual mana yang mendapat data, dan kemudian laksanakan penyataan pilih;
Di sini kita mendapatkan data daripada jadual skor dan menggunakan kumpulan demi pernyataan untuk mengumpulkan data mengikut peraturan tertentu; kemudian Kira kiraan() pada hasil terkumpul akhirnya pilih hasil gabungan dan ringkaskan setiap kumpulan hasil pengiraan dalam langkah sebelumnya ke dalam jadual .
Dalam soalan pertama, adalah perlu untuk "mengira purata markah setiap mata pelajaran dan mendapati bahawa skor purata lebih besar daripada atau sama dengan 80 mata". Dalam dua bahagian di atas, kami mendapat pengiraan Markah purata subjek setiap hari, kini nyatakan syarat untuk skor purata : "lebih daripada atau sama dengan 80 mata" , kami menggunakan mempunyai klausa .
Mempunyai klausa dan klausa mana kedua-duanya memilih data secara bersyarat.
-- 计算平均成绩大于等于80分的课程; SELECT 课程号,AVG(成绩) FROM score GROUP BY 课程号 HAVING AVG(成绩)>=80;
Adakah ini bermakna susunan klausa mempunyai juga berada di hadapan ringkasan hasil pilih? Ya, klausa mempunyai menentukan syarat untuk hasil pengumpulan kumpulan mengikut, seperti memerlukan skor lebih besar daripada atau sama dengan 80. Selepas menapis keputusan, keputusan diringkaskan.
-- 对教师表根据教师姓名排序 SELECT * FROM teacher ORDER BY 教师姓名;
Kami mendapati bahawa nilai null Null berada pada kedudukan pertama, jadi: Lajur yang mengandungi nilai null berada dalam Apabila mengisih, nilai nol akan berada pada permulaan Apabila jumlah data adalah besar dan anda ingin melihat nilai nol, anda boleh menggunakan pengisihan ini.
另外,在补充一个limit语句,从查询结果中取出指定行,比如,我们如果从刚才的查询结果中只取第一行:
-- 计算平均成绩大于等于80分的课程并根据成绩降序排,并获取第一行 SELECT 课程号,AVG(成绩) FROM score GROUP BY 课程号 HAVING AVG(成绩)>=80 ORDER BY AVG(成绩) DESC LIMIT 1;
接下来我们进行一个总结。
简单来说:明确问题,将问题翻译成大白话,逐步进行拆解,并写出分析思路和对应的SQL思路。
1) 明确问题,将问题翻译成大白话:
“计算各科的平均成绩并且得出平均成绩大于等于80分的课程并降序排列”翻译成大白话就是:
“计算每一门课程的平均成绩,然后根据得出的结果,进行大于等于80分的条件查询,对查询结果进行降序排列”。
2) 逐步进行拆解,并写出分析思路和对应的SQL思路:
① 对课程号进行分组,计算每一门课程的平均成绩;
② 对①的结果指定条件“>=80”;
③ 对②的结果进行降序排列;
我们可以把拆解后的思路套用到下方的公式中:
select 查询结果 from 从那张表中查找数据 where 查询条件(运算符、模糊查询) group by 分组(每个) having 对分组结果指定条件 order by 对查询结果排序 limit 从查询结果中取出指定行;
试一下吧:
select 查询结果[课程号,avg(成绩)] from 从那张表中查找数据[成绩表score] where 查询条件(运算符、模糊查询)[No] group by 分组(每个)[课程号] having 对分组结果指定条件[avg(成绩)>=80] order by 对查询结果排序[avg(成绩)desc] limit 从查询结果中取出指定行;[No]
这样子,问题是不是就迎刃而解呢?
推荐学习:mysql视频教程
Atas ialah kandungan terperinci Bagaimana untuk mengumpulkan dan menjumlahkan dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!