MySql中根据一列状态值查询状态的个数
最近搞报表的项目,要写数据库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中根据一列状态值查询状态的个数的更多相关文章
- 一起看看MySQL中的隐藏列
摘要:在mysql的多版本并发控制mvcc中,我们知道mysql中存在一些隐藏列,例如行标识.事务ID.回滚指针等,不知道大家是否和我一样好奇过,要怎样才能实际地看到这些隐藏列的值呢? 本文分享自华为 ...
- MySQL中MyISAM为什么比InnoDB查询快
大家都知道在MySQL中,MyISAM比InnoDB查询快,但很多人都不知道其中的原理. 今天我们就来聊聊其中的原理,另外也验证下是否MyISAM比InnoDB真的查询快. 在探索其中原理之前,我们先 ...
- mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决
※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样)SHOW VARIABLES; //查看系统变量//查询字符编码相关的系统变量SHOW VARIABLES WHERE var ...
- 眼见为实,看看MySQL中的隐藏列!
在介绍mysql的多版本并发控制mvcc的过程中,我们提到过mysql中存在一些隐藏列,例如行标识.事务ID.回滚指针等,不知道大家是否和我一样好奇过,要怎样才能实际地看到这些隐藏列的值呢? 本文我们 ...
- 你了解MySQL中的多表联合查询吗?
前言: 多表联合查询,其实就是我们MySQL中的join语句,经常会看到有人说join非常影响性能,不建议使用,你知道这是为什么呢?我们究竟可不可以用呢? 测试数据: CREATE TABLE `t2 ...
- Mysql中使用JDBC流式查询避免数据量过大导致OOM
一.前言 java 中MySQL JDBC 封装了流式查询操作,通过设置几个参数,就可以避免一次返回数据过大导致 OOM. 二.如何使用 2.1 之前查询 public void selectData ...
- 如何在MySQL中增加一列
如果想在一个已经建好的表中添加一列,可以使用诸如: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(255) not null; 这 ...
- MySql中增加一列
如果想在一个已经建好的表中添加一列,可以用诸如: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null; 这条语 ...
- mysql中存储字段类型的查询效率
检索性能从快到慢的是(此处是听人说的): 第一:tinyint,smallint,mediumint,int,bigint第二:char,varchar第三:NULL 解释(转载): 整数类型1.TI ...
随机推荐
- Linux安全审计
Client: OMAudit_agent.py #!/usr/bin/env python #coding:utf- import sys import socket import fcntl im ...
- Scala学习一——基础
一.使用Scala解释器 如果以命令行的方式运行,输出的结果会把类型带上,且结果名默认为res0递增.且Scala解释器读到一个解释器求值打印然后读取下一个(这个过程为读取-求值-打印-循环[REPL ...
- 剑指offer-数组中只出现一次的数字-数组-python
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. # -*- coding:utf-8 -*- class Solution: # 返回[a, ...
- 基于EPICS实现西门子S7通信
(1) EPICS官网下载Demo并复制文件到指定位置 (2) 创建Modules文件夹,wget https://epics.anl.gov/download/modules ...
- EJS学习(三)之语法规则中
⚠️实例均结合node,也就是AMD规范版本 ejs中使用render()表示渲染文本 接收三个参数:模版字符串.data.options,返回一个字符串 const ejs = require('e ...
- Axure(一)
axure1.原型工具 2.软件开发 1.可行性分析2.需求分析 产品经理(和甲方对接需求,) 乙方 -- 甲方 ps(专业性强,精美) 设计师 html(可变 ...
- 在iPhone开发中实现解压缩gzip
在iPhone开发中实现解压缩gzip是本文要介绍的内容,最近做的一个东西中,需要从网络获取xml文件,但是该文件用了gzip压缩的.搜索一 下有人说gzip压缩的用urlrequest可以自己解压, ...
- scala下划线的作用
https://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala Existent ...
- VIM简单操作
ngg就跳转到第n行行首,G就到结尾 0光标移到当前行行首 $光标移到当前行行末 fx搜索当前行中下一个出现x的地方 yy复制当前行 nyy复制当前行到n-1行 dd删除当前行 ndd删除当前行到n- ...
- SVN 安装教程
安装包:http://pan.baidu.com/s/1kTTcbJp 安装步骤看这个博主的就好了: http://www.cnblogs.com/xing901022/p/4399382.html ...