SQL 根据分类进行个数统计

article/2025/11/7 9:24:32

前言:使用数据库存储数据时,常会有根据存储数据的类型对数据的个数进行分类统计,可采用以下两种方法使用sql直接进行统计。

业务场景:消息表中存储各种消息,消息有多种类型,每条消息对应一个类型,前端展示时需要根据消息的种类提示消息的条数。

表结构:

CREATE TABLE `t_message` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',`message_type` int(11) NOT NULL COMMENT '消息类型(1-任务通知,2-素材通知,3-系统通知)',`content` varchar(255) DEFAULT NULL COMMENT '消息内容',`is_read_already` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已读',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='消息中心-消息表'

处理方式:

1.使用 GROUP BY 进行分类统计:

SELECT message_type AS messageType,COUNT(id) AS total
FROM t_message
WHERE receiver = 60
GROUP BY message_type;

查询结果:

2.使用 SUM() 函数和 CASE WHEN 语句进行统计:

SELECT COUNT(id) AS totalCount,SUM(CASE WHEN message_type = 1 THEN 1 ELSE 0 END) AS taskCount,SUM(CASE WHEN message_type = 2 THEN 1 ELSE 0 END) AS materialCount,SUM(CASE WHEN message_type = 3 THEN 1 ELSE 0 END) AS systemCount
FROM t_message
WHERE receiver = 60;

查询结果:

 

总结:

1. 推荐使用第二种方式,更加清晰明了。缺点是如果类型增加则需要增加对应类型的统计语句,也就是 SUM() 统计;

2. 统计时,如果没有对应的个数,会出现 null 的情况,如下图

     

此时可使用  IFNULL() 函数。

SELECT COUNT(id) AS totalCount,IFNULL(SUM(CASE WHEN message_type = 1 THEN 1 ELSE 0 END),0) AS taskCount,IFNULL(SUM(CASE WHEN message_type = 2 THEN 1 ELSE 0 END),0) AS materialCount,IFNULL(SUM(CASE WHEN message_type = 3 THEN 1 ELSE 0 END),0) AS systemCountFROM t_messageWHERE receiver = 56;


http://chatgpt.dhexx.cn/article/1usBD57U.shtml

相关文章

MySql:一条sql语句多个count统计

user表&#xff1a; 多个count统计sql语句 selectcount(case when sex 男 then 1 end) as man,count(case when sex 女 then 1 end) as woman,count(case when age>18 then 1 end) as adult,count(case when age<18 then 1 end) as nonage from user可根据自己的业务更改…

sql 统计常用的sql

统计常用的sql语句&#xff1a; 今天的所有数据&#xff1a;select * from 表名 where DateDiff(dd,datetime类型字段,getdate())0 昨天的所有数据&#xff1a;select * from 表名 where DateDiff(dd,datetime类型字段,getdate())1 7天内的所有数据&#xff1a;select * from …

sql统计表总数以及表中字段总数

sql统计表总数&#xff1a;select count() from sysobjects where type‘U’ 统计字段总数&#xff1a;select count() from syscolumns where id object_id(‘表名’)

SQL统计占比

假设access_log表有src_ip、user_agent、url三个字段&#xff0c;每一次请求产生一条记录(行)&#xff0c;现在想统计访问量前10的IP、访问量count及访问量占比percent 第一种方式&#xff1a;直接从多个表查询数据 SELECTa.src_ip,a.count,round(a.count * 100 / b.total, 2)…

sql统计count

mysql中count统计不同数据出现次数 简单数据表 如图&#xff1a; 统计有多少个不同手机进行缴费 sql统计是使用count() 进行统计 在不考虑重复的情况下&#xff0c;统计手机数 select count( phone_id) from CM_LOG ; 结果 统计出来是3个&#xff08;提示应该是2个的&…

一条sql实现统计总数、分组分别统计总数

wshanshi&#xff1a;个人使用记录… 一、 方法一 SELECT COALESCE ( sex, 总数 ), COUNT( id ) 人数 FROM test GROUP BY sex WITH ROLLUP;二、方法二 SELECT count( 1 )总数, sum( CASE WHEN sex 1 THEN 1 ELSE 0 END )男, sum( CASE WHEN sex 0 THEN 1 ELSE 0 END ) 女 …

matlab 均值滤波

在matlab中使用滤波器对图像进行滤波非常方便&#xff0c;只需要调用库函数&#xff0c;只是满足工程需要就够了&#xff1b;但是想学习图像处理的滑&#xff0c;是远远不够的&#xff0c;还要对算法的基本原理弄清楚 1-均值滤波 均值滤波也叫做线性滤波&#xff0c;规定一个…

MATLAB3*3均值滤波、5*5均值滤波和圆盘滤波

clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 im imread(‘coloredChips.png’); % 原图像 R imnoise(im(:,:,1),‘gaussian’,0,0.01); % R 白噪声 G imnoise(im(:,:,2),‘gaussian’,0,0.01); % …

matlab中blur函数_matlab-----均值滤波函数的实现

均值滤波的原理是对图像以一个区域(方形,圆形)等为模板,对该区域内的数据求平均后赋值给区域的中心 这种滤波方式原理简单,但是在滤波的同时会造成图像模糊。 本文将尝试对matlab中的filter2()均值函数用自定义函数averfilter()实现。 %x是需要滤波的图像,n是模板大小(即nn)…

MATLAB逆谐波均值滤波

% 逆谐波均值滤波 clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 im imread(‘brain.bmp’); % 原图像 im imnoise(im,‘gaussian’,0,1e-3); % 原图像 白噪声 im1 conharmmean_filter(im,3,3,3/2)…

中心滤波与均值滤波MATLAB

1. 均值滤波 (1). 在当前的矩阵元素A(m,n)下&#xff0c;选择一个合适的模板&#xff08;模板范围可以自定&#xff0c;如3*3&#xff0c;5*5&#xff0c;n*n等&#xff09;&#xff0c;取该模板中所有元素的平均值。 (2). 将平均值赋值给所选的矩阵元素A(m,n)&#xff0c;其他…

MATLAB谐波均值滤波

% 谐波均值滤波 clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 im imread(‘brain.bmp’); % 原图像 im imnoise(im,‘gaussian’,0,1e-3); % 原图像 白噪声 im1 harmonymean_filter(im,3,3); % 应…

Matlab实现均值滤波与FPGA进行对比,并采用modelsim波形仿真

文章目录 一、实验目标二、实验中遇到的问题1、如何实现均值滤波2、modelsim仿真的时候涉及到IP核不存在怎么办&#xff1f; 三、具体实现3.1 均值滤波的实现3.1.1 调用shift_ram ip核&#xff1a;3.1.2 均值滤波的流水并行处理 3.2 整体模块设计3.2.1 图像生成模块3.2.2 Ycbcr…

图像处理中调用matlab自带均值滤波、高斯滤波和中值滤波函数的案例以及自编均值滤波的案例。

[TOC](利用matlab自带均值滤波器的代码&#xff0c;分别对一幅图像实现3*3&#xff0c;5*5&#xff0c;7*7&#xff0c;9*9的均值滤波&#xff0c;并对实验结果进行分析。) [TOC](分别给干净图像添加高斯和椒盐噪声&#xff0c;然后进行均值滤波、高斯滤波和中值滤波&#xff…

MATLAB几何均值滤波

% 几何均值滤波 clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 im imread(brain.bmp); % 原图像 im imnoise(im,gaussian,0,1e-3); % 原图像 白噪声im1 geometry_fspecial(…

Matlab 均值滤波与中值滤波

%%以下是本人在学习中的个人理解&#xff0c;如有错误请指出 所谓的滤波就是一个系数矩阵&#xff08;也称为模板&#xff0c;滤波器&#xff0c;滤波模板&#xff0c;核&#xff0c;掩模或者窗口&#xff09;&#xff0c;然后用这个模板对应图像矩阵&#xff08;填充0后的图像…

matlab均值滤波,中值滤波

滤波核33的均值滤波。 Fimread(D:\Desktop\66.png); Frgb2gray(F); fdouble(F); [row,col]size(f); f1zeros(row,col);for i2:row-1for j2:col-1fx[f(i-1,j-1),f(i-1,j),f(i-1,j1),f(i,j-1),f(i,j),f(i,j1),f(i1,j-1),f(i1,j),f(i1,j1)];f1(i,j)sum(fx,all)/9/256; end end fi…

matlab均值滤波实现

一、噪声添加 椒盐噪声&#xff1a; I_noisedouble(imnoise(I,salt & pepper,0.02));%后面0.02为参数高斯噪声&#xff1a; I_noisedouble(imnoise(I,gaussian,0.02));二、均值滤波原理 主要思想为邻域平均法&#xff0c;即用几个像素灰度的平均值来代替每个像素的灰度。…

MATLAB均值滤波

% 中值滤波 clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 [filename ,pathname]… uigetfile({‘.bmp’;.jpg’;},‘选择图片’); % 选择图片路径 str [pathname filename]; % 合成路径文件名 im imr…

MATLAB--数字图像处理 均值滤波

均值滤波 代码&#xff1a; timread(a1.jpg); [m,n,z]size(t); t1imnoise(t,gaussian,0,0.02); imshow(t1),title(加入高斯噪声后) t2t; for i1:m-2 for j1:n-2 t2(i1,j1,:)round(t2(i,j,:)/9t2(i,j1,:)/9t2(i,j2,:)/9t2(i1,j,:)/9t2(i1,j1,:)/9t2(i1,j2,:)/9t2(i2,j,:)/9t2(i2…