MySQL统计分组后每组的个数

在实际的数据分析和统计中,经常需要对数据进行分组并统计每组的个数。MySQL作为一种常用的关系型数据库,提供了丰富的功能和语法来满足这个需求。本文将介绍如何使用MySQL进行分组统计,并给出相应的示例代码。

分组统计的概念

分组统计是指将数据按照某个字段进行分类,然后统计每个分类的数量。例如,假设有一张学生成绩表,包含学生的姓名和分数两个字段。我们可以按照分数进行分组,然后统计每个分数段的学生数量。

使用GROUP BY子句进行分组统计

在MySQL中,可以使用 GROUP BY 子句进行分组统计。 GROUP BY 子句将数据按照指定的字段进行分组,然后可以使用聚合函数如 COUNT() SUM() 等来对每个分组进行统计。

下面是一个示例的学生成绩表:

CREATE TABLE scores (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  score INT
INSERT INTO scores (name, score) VALUES
  ('张三', 80),
  ('李四', 90),
  ('王五', 85),
  ('赵六', 80),
  ('钱七', 95);

现在,我们想要按照分数进行分组,并统计每个分数段的学生数量。可以使用以下SQL语句实现:

SELECT score, COUNT(*) as count
FROM scores
GROUP BY score;

上述SQL语句中,SELECT语句用于选择要查询的字段,即分数和统计后的数量。COUNT(*)用于统计每个分组的数量,as count则将统计结果的列名命名为countFROM scores用于指定要查询的表名,即学生成绩表。GROUP BY score表示按照分数字段进行分组。

运行以上SQL语句,将得到以下结果:

score count

从结果中可以看出,有2个学生的分数是80分,1个学生的分数是85分,1个学生的分数是90分,1个学生的分数是95分。

使用HAVING子句进行筛选

在分组统计中,有时候需要对分组后的结果进行筛选,只保留满足某个条件的分组。这时可以使用HAVING子句。

例如,我们只想要保留分数大于等于90分的分组。可以使用以下SQL语句:

SELECT score, COUNT(*) as count
FROM scores
GROUP BY score
HAVING score >= 90;

上述SQL语句中的HAVING score >= 90表示只保留分数大于等于90分的分组。

运行以上SQL语句,将得到以下结果:

score count

从结果中可以看出,只有分数为90和95的分组被保留。

使用WITH ROLLUP进行分组小计

有时候需要在分组统计的结果中添加小计,即对所有分组的统计结果再进行一次统计。MySQL提供了WITH ROLLUP关键字来实现这个功能。

例如,我们想要对学生成绩表按照分数进行分组,并且在结果中添加一个总计行。可以使用以下SQL语句:

SELECT IFNULL(score, '总计') as score, COUNT(*) as count
FROM scores
GROUP BY score WITH ROLLUP;

上述SQL语句中的IFNULL(score, '总计')用于将空值(表示小计行)显示为'总计'。WITH ROLLUP表示添加小计行。

运行以上SQL语句,将得到以下结果:

score count
javacv mat 二值化

       一和二都是我根据自己的想法动手写的二值化处理图片,可能和opencv库的函数求二值化有区别。一、用深度学习的正态分布和激活函数进行二值化在这里直接写代码:import numpy as np import torch import torch.nn as nn import cv2 #1.silu激活函数 class SiLU(nn.Modu