mysql では、SUM() 関数と「GROUP BY」を指定した SELECT ステートメントを使用してグループの合計を実行できます。構文は「SELECT クエリ フィールド SUM (合計フィールド) AS フィールド FROM テーブル名 WHERE 条件」です。 GROUP BY フィールド 1 をグループ化し、フィールド 2 をグループ化します。".
このチュートリアルの動作環境: Windows10 システム、mysql8.0.22 バージョン、Dell G3 コンピューター。
mysql では、
SELECT 查询字段 SUM(求和字段) AS 字段 FROM 表名 WHERE 条件 GROUP BY 分组字段一,分组字段二;
を使用してグループ合計を実行できます。
例は次のとおりです。
1) count() は、特定の列の行数を検索します。
count は理解しやすいです。 (列名) は、特定の列の行数を調べるための列の行数です。この列では null 値を持つ行の数はカウントされないことに注意してください。例:
>-- 教師が何人いるかをクエリします。
>-- Teacher テーブルにある行数をクエリします。 SELECT COUNT(*) FROM Teacher;
列に重複する値がある場合、 をカウントしますが、重複する値はカウントしたくありません## #、 私たちは何をすべきか?解決するには、distinct を使用できます。
-- 查询成绩表里共有几个学生的成绩 SELECT COUNT(DISTINCT 学号) FROM score;
2) sum() は、データの特定の列
sum を合計します。列内の値を合計するには、数値のみを計算できます。例:-- 对所有成绩求和 SELECT SUM(成绩) FROM score;
3) avg() は特定の列の値を平均します
同様に、平均は計算される 数値を計算する:-- 对所有成绩求平均值 SELECT AVG(成绩) FROM score;
##4) max() は特定のデータ列の最大値を検索し、min() は特定のデータ列の最小値を検索します。データ列
-- 获取所有成绩中的最大成绩 SELECT MAX(成绩),MIN(成绩) FROM score;グループ質問では、各科目の平均スコアを知る必要があると述べました。それをグループ化します。 SQL では、group by ステートメントを使用して、1 つ以上の列に従って結果セットをグループ化できます。例:
-- 计算每一科课程的平均成绩 SELECT 课程号,AVG(成绩) FROM score GROUP BY 课程号;前回の記事では、どのテーブルが最初に実行されるかという SQL ステートメントの実行順序について簡単に紹介しました。 データを取得します。次に、select ステートメントを実行します。
スコア テーブルからデータを取得し、group by ステートメントを使用して特定のルールに従ってデータをグループ化します。結果に対して count() を計算するグループで、最後に結合された結果を選択し、前のステップの計算結果の各セットをテーブル に要約します。
グループ化条件の条件を指定します最初の問題では、「各科目の平均点を計算し、その平均点が80点以上になるようにする」ことが求められています。上の 2 つのセクションでは、毎日の科目の平均スコアを計算しました。次に、平均スコアの条件: 「80 点以上」 を指定します。 を使用します。句を持つ。
have 句と where 句はどちらもデータの条件付き選択です。違いは、where を summary 関数で使用できないことです。
-- 计算平均成绩大于等于80分的课程; SELECT 课程号,AVG(成绩) FROM score GROUP BY 课程号 HAVING AVG(成绩)>=80;それは、have 句の順序も選択結果の概要の前にあるという意味ですか?はい、having 句は、80 以上のスコアを必要とするなど、group by のグループ化結果の条件を指定します。結果をフィルタリングした後、結果が要約されます。
-- 对教师表根据教师姓名排序 SELECT * FROM teacher ORDER BY 教师姓名;NULL 値 Null が最初にランク付けされることがわかりました。したがって、次のようになります。
NULL 値を含む列は、次の場合にソートされます。ソートすると、NULL 値が先頭になります。 データ量が多く、NULL 値を確認したい場合は、このソートを使用できます。
另外,在补充一个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视频教程
以上がmysqlでグループ化して合計する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。