最近搞报表的项目,要写数据库sql语句,根据状态值查询状态的个数,这个开始难为到我了,不过已经有解决办法了。

在数据库表中有一个字段是状态(zt),这里面有1-7这7个状态,现在查询每个状态的数量,并且显示在一张表中,正常情况下查状态是:

SELECT COUNT(*) draft  FROM `it_project_info` WHERE `it_project_info`.item_status`='1';

SELECT COUNT(*) checks FROM `it_project_info` WHERE `it_project_info`.item_status`='2';

SELECT COUNT(*) plan FROM `it_project_info` WHERE `it_project_info`.item_status`='3';

SELECT COUNT(*) implement  FROM `it_project_info` WHERE `it_project_info`.item_status`='4';

SELECT COUNT(*) online  FROM `it_project_info` WHERE `it_project_info`.item_status`='5';

SELECT COUNT(*) cancel  FROM `it_project_info` WHERE `it_project_info`.item_status`='6';

SELECT COUNT(*) knot  FROM `it_project_info` WHERE `it_project_info`.item_status`='7';

首先,要先将行变成列:

SELECT t.*,
CASE WHEN t.`item_status`=1 THEN 1 ELSE 0 END AS draft,
CASE WHEN t.`item_status`=2 THEN 1 ELSE 0 END AS checks,
CASE WHEN t.`item_status`=3 THEN 1 ELSE 0 END AS plan,
CASE WHEN t.`item_status`=4 THEN 1 ELSE 0 END AS implement,
CASE WHEN t.`item_status`=5 THEN 1 ELSE 0 END AS online,
CASE WHEN t.`item_status`=6 THEN 1 ELSE 0 END AS cancel,
CASE WHEN t.`item_status`=7 THEN 1 ELSE 0 END AS knot
FROM `it_project_info` t

然后查询每一列的个数:

SELECT
IFNULL(SUM(m.draft), 0) draftTotal,
IFNULL(SUM(m.checks), 0) checkTotal,
IFNULL(SUM(m.plan), 0) planTotal,
IFNULL(SUM(m.implement), 0) implementTotal,
IFNULL(SUM(m.online), 0) onlineTotal,
IFNULL(SUM(m.cancel), 0) cancelTotal,
IFNULL(SUM(m.knot), 0) knotTotal
FROM
(
SELECT
CASE WHEN t.`item_status`=1 THEN 1 ELSE 0 END AS draft,
CASE WHEN t.`item_status`=2 THEN 1 ELSE 0 END AS checks,
CASE WHEN t.`item_status`=3 THEN 1 ELSE 0 END AS plan,
CASE WHEN t.`item_status`=4 THEN 1 ELSE 0 END AS implement,
CASE WHEN t.`item_status`=5 THEN 1 ELSE 0 END AS online,
CASE WHEN t.`item_status`=6 THEN 1 ELSE 0 END AS cancel,
CASE WHEN t.`item_status`=7 THEN 1 ELSE 0 END AS knot
FROM `it_project_info` t
) m

这样就可以得到想要的结果了。

MySql中根据一列状态值查询状态的个数的更多相关文章

  1. 一起看看MySQL中的隐藏列

    摘要:在mysql的多版本并发控制mvcc中,我们知道mysql中存在一些隐藏列,例如行标识.事务ID.回滚指针等,不知道大家是否和我一样好奇过,要怎样才能实际地看到这些隐藏列的值呢? 本文分享自华为 ...

  2. MySQL中MyISAM为什么比InnoDB查询快

    大家都知道在MySQL中,MyISAM比InnoDB查询快,但很多人都不知道其中的原理. 今天我们就来聊聊其中的原理,另外也验证下是否MyISAM比InnoDB真的查询快. 在探索其中原理之前,我们先 ...

  3. mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决

    ※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样)SHOW VARIABLES; //查看系统变量//查询字符编码相关的系统变量SHOW VARIABLES WHERE var ...

  4. 眼见为实,看看MySQL中的隐藏列!

    在介绍mysql的多版本并发控制mvcc的过程中,我们提到过mysql中存在一些隐藏列,例如行标识.事务ID.回滚指针等,不知道大家是否和我一样好奇过,要怎样才能实际地看到这些隐藏列的值呢? 本文我们 ...

  5. 你了解MySQL中的多表联合查询吗?

    前言: 多表联合查询,其实就是我们MySQL中的join语句,经常会看到有人说join非常影响性能,不建议使用,你知道这是为什么呢?我们究竟可不可以用呢? 测试数据: CREATE TABLE `t2 ...

  6. Mysql中使用JDBC流式查询避免数据量过大导致OOM

    一.前言 java 中MySQL JDBC 封装了流式查询操作,通过设置几个参数,就可以避免一次返回数据过大导致 OOM. 二.如何使用 2.1 之前查询 public void selectData ...

  7. 如何在MySQL中增加一列

    如果想在一个已经建好的表中添加一列,可以使用诸如: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(255) not null; 这 ...

  8. MySql中增加一列

    如果想在一个已经建好的表中添加一列,可以用诸如: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null; 这条语 ...

  9. mysql中存储字段类型的查询效率

    检索性能从快到慢的是(此处是听人说的): 第一:tinyint,smallint,mediumint,int,bigint第二:char,varchar第三:NULL 解释(转载): 整数类型1.TI ...

随机推荐

  1. vue cli3项目发布在apache www/vue目录下并配置history路由

    注意:vue项目打包后默认是指向服务器的根路径(比如apache默认www目录是根路径,当然也可以修改),这种情况不需要做路径的配置,只需要做history配置,如果不是发布到根路径而是www/vue ...

  2. JDK8~13新特性概览

    JDK8 1. 接口default 与 static 关键字 /** * jdk8中接口可以使用声明default和static修饰的方法 * static修饰的方法和普通的方法一样,可以被直接调用 ...

  3. Centos7环境下Docker容器的安装与卸载

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal. ...

  4. 配置Linux静态IP地址

  5. 关于select的取值

    这篇博客,主要是记录我我所犯的错误,或者自己的写法不规范导致了错误,大家可以引以引以为鉴. 我要获取select当前的值,在IE9上我可以直接写document.getElementById(&quo ...

  6. 韦东山嵌入式Linux学习笔记08--中断体系结构

    中断是什么? 举个栗子, 系统怎么知道你什么时候插入鼠标这个设备? 可以有两种处理方式: 1. 查询方式: 轮询去检测是否有设备插入; 2. 中断的方式 当鼠标插入这个事件发生时, 置位某个寄存器,告 ...

  7. SDRAM介绍

    一.             介绍 存储器的最初结构为线性,它在任何时刻,地址线中都只能有一位有效.设容量为N×M的存储器有S0-Sn-1条地址线:当容量增大时,地址选择线的条数也要线性增多,利用地址 ...

  8. Python之路:进程、线程

    目录 一.进程与线程区别 1.1 什么是线程 1.2 什么是进程 1.3 进程与线程的区别 二.Python GIL全局解释器锁 三.线程 3.1 threading模块 3.2 Join & ...

  9. 【AGC 036C】GP2

    https://atcoder.jp/contests/agc036/tasks/agc036_c 题意 有一个长度为 $n$ 的非负整数序列 $x$,初始时全为 $0$.一次操作定义为选择一对正整数 ...

  10. MHA介绍和基础、原理、架构、工具介绍

    一.MHA简介 软件简介 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebo ...