最近搞报表的项目,要写数据库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. MySQL中文正常而mybatis查询出现乱码的解决方案

    解决方案是在spring-mvc.xml文件中,加入 <mvc:annotation-driven> <mvc:message-converters> <bean cla ...

  2. git删除已经push的远程文件或文件夹

    在使用git提交项目时,有时候会误提交一下文件,比如:*.iml,*.project,*.settings,.idea/*等文件,有时候这些不需要提交的文件可以加入到.gitignore,在提交的时候 ...

  3. Spring配置redis及使用

    一.redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. ...

  4. zookeeperAPI的常用方法

    zookeeper支持三种部署方式: 1 单机 2 集群 3 伪集群 删除节点 zkClient.delete(path);

  5. luogu P3620 [APIO/CTSC 2007]数据备份

    luogu 首先如果一条线不是了连接的相邻两个位置一定不优,把它拆成若干连接相邻位置的线.所以现在问题是有\(n\)个物品,选\(k\)个,要求选的位置不能相邻,求最小总和 如果没有选的位置不能相邻这 ...

  6. VS2017 VS2019 无法进入安装界面闪退问题(windows7SP1)

    如果离线安装 Visual Studio 2017/2019出现“即将完成…一切即将准备就绪.”的画面后,等几秒安装程序没有任何错误提示就关闭了,无法继续安装. 解决方法: 将vs_enterpris ...

  7. 94. Binary Tree Inorder Traversal (Java)

    Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...

  8. 关于页面多个ajax请求阻塞的问题

    最近遇到一个问题,我的一个页面有多个ajax请求,但是一个很快的请求却需要很长时间才返回,而且慢于一个耗时比较长的请求,我在考虑是不是有ajax异步并发有问题,但是查询了一些资料,ajax不存在这样的 ...

  9. 《python解释器源码剖析》第0章--python的架构与编译python

    本系列是以陈儒先生的<python源码剖析>为学习素材,所记录的学习内容.不同的是陈儒先生的<python源码剖析>所剖析的是python2.5,本系列对应的是python3. ...

  10. 文件hash、上传,实现文件上传重复验证

    在平台开发中,我们往往对性能要求十分严苛,每一个字段.接口都有严格的要求. 系统中文件流操作十分占用资源,这里为大家介绍对文件上传进行哈希校验---同一文件只允许上传一次到服务器,其他的上传只要指向文 ...