文档章节

根据身份证统计男女人数

黑夜探路人
 黑夜探路人
发布于 2016/06/05 20:12
字数 806
阅读 248
收藏 9
点赞 0
评论 2

今天的这个SQL花了我大概四十多分钟,由于需求比之前的要复杂点,所以多花了点时间,下面就来分享下我的处理思路和完整的SQL代码吧。

之前处理逻辑问题的时候,一般都喜欢将其放到程序中处理,一是比较熟悉程序中的各种语法和方法,处理起来可能会得心应手,二是习惯了只用SQL来处理CURD操作,并且对SQL的了解不是很深入,导致很多的人都避免用SQL处理。

其实这种想法是错误的,我之前也是有这种想法,后来发现SQL有他自己独特的魅力,并且,很多的情况下,用SQL直接的执行效率要高于在程序中执行,当然,这个要分情况来定了,但我鼓励大家多尝试一些新的东西,学习一些新的语言,这样才能快速成长,不是吗

废话不多说,下面上干货。

这个的需求是通过民警身份证号来获取其性别,并进行统计,难点在于其中有的身份证号码是18位的,有的是15位的,这个就需要分情况来判断,当然,如果在程序中处理是很好处理的,现在提升的难度是想只用一天SQL来实现其中的判断和统计操作。

个人处理思路是用PGSQL中的case语句来执行判断操作,然后通过数据的截取函数substring来截取我们需要的那个数,通过该数模2来判断到底是奇数还是偶数,奇数表示男,反之则表示女,最后是通过聚集函数来统计男女人数。

下面直接上SQL语句

SELECT SUM(female) female,SUM(male) male FROM (
SELECT CASE WHEN (char_length(t2.idcard)=18 AND (CAST(substring(t2.idcard,char_length(t2.idcard)-1,1) AS INTEGER)%2 = 0))
 OR (char_length(t2.idcard)=15 AND (CAST(substring(t2.idcard,char_length(t2.idcard),1) AS INTEGER)%2 = 0))
 THEN 1 ELSE 0 END female,
CASE WHEN (char_length(t2.idcard)=18 AND (CAST(substring(t2.idcard,char_length(t2.idcard)-1,1) AS INTEGER)%2 != 0))
 OR (char_length(t2.idcard)=15 AND (CAST(substring(t2.idcard,char_length(t2.idcard),1) AS INTEGER)%2 != 0))
 THEN 1 ELSE 0 END male
FROM (SELECT DISTINCT mjbh FROM policehealth_hospitalized) t1 LEFT JOIN users t2 ON t1.mjbh=t2.policenum WHERE (char_length(t2.idcard)=18 OR char_length(t2.idcard)=15))tt

这里可能在看的时候有点困难,下面解释下其中几个函数的用法

char_length()是来获取字段数据中的长度的,

substring()是用来进行截取的,其有三个参数,一位需要截取的字段名,二位截取的起始位置,三是需要截取的长度,

cast()是一个用户自己定义的转换类型的函数,这里是将string类型转换成来integer类型

case when then else end就是SQL中的逻辑判断了

这里用到了子查询是因为里面的条件判断有两个,直接在里面用sum无法实现,所以外面在包来一层。

如果觉得对你有帮助,记得关注我,也希望大家能多交流

© 著作权归作者所有

共有 人打赏支持
黑夜探路人
粉丝 5
博文 26
码字总数 25102
作品 0
贵阳
程序员
加载中

评论(2)

贺蜜峰
贺蜜峰
自定义sql函数,就解决了
贺蜜峰
贺蜜峰
自定义sql函数,就解决了
氚云人事文档介绍

HR管理痛点: 伴随着企业的逐步发展和壮大,集团形态将是最重要的企业运作模式,与此相伴,组织规模将会越来越大,组织层次越来越复杂,管理幅度也会越来越多。 同时,人力资源管理也是一门专...

lwl_BPM
2017/06/20
0
0
求大佬帮写用JAVA数据结构写一个简易族谱

二、课程设计项目及要求 1、项目名称:族谱管理系统的设计与实现 2、目的要求:采用树型结构实现族谱的创建、查询、插入等相关操作。课程设计目的是理解树型结构的设计思想,通过课程设计,一...

某先生
07/12
0
0
2018 春运即将启幕,AI 上线保障旅客安全

2018年春运即将上线。 提起春运,很多人心中五味杂陈,“拥挤”、“抢票难”、“偷盗频发”等字眼跃然脑中。 其实这些年,随着铁路部门加大对智能化和服务创新的投入,上述几个热词在2018年开...

张栋
01/08
0
0
MySQL--6 分组

#分组 按照字段分组,表示此字段相同的数据会被放到一个组中 分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中 可以对分组后的数据进行统计,做聚合运算 语法: sele...

pp小白
01/24
0
0
正态分布为什么常见?

统计学里面,正态分布(normal distribution)最常见。男女身高、寿命、血压、考试成绩、测量误差等等,都属于正态分布。 以前,我认为中间状态是事物的常态,过高和过低都属于少数,这导致了...

阮一峰
2017/08/02
0
0
机会模型与显著性检验(二)

χ² - 检验 读作“卡方检验”。它用来检验盒子的组成成分。 举一个书本中的习题: 某项有关加州 Alameda 县的大陪审团的研究,比较了陪审团成员们与全体人口之间的统计特征,目的是查看陪审...

Lee的白板报
2015/09/10
84
0
你说女生零基础学前端到底难不难?

当女程序员遇到问题 很多人认为IT开发行业都被当做男人们做的事情,根据市场调查显示,近几年以来学web前端的女生呈上升趋势,在小编看来,在互联网蓬勃发展的年代,前端工作早已经不是男人们...

web前端程序员
2017/11/20
0
0
【统计数据告诉你】从统计数据年鉴还能分析出这些?

主页菌在工作过程中 深刻的发现了统计年鉴数据的重要性 也深深地认识到了自己对统计年鉴的不熟悉 很多数据在统计年鉴里其实都可以找到 当然也有很多数据是统计年鉴里面没有的 熟悉统计年鉴真...

徐凯恒
2017/08/24
0
0
爬取知乎60万用户信息之后的简单分析

爬取知乎60万用户信息之后的简单分析 标签 : webporter [TOC] 使用 Java+Elasticsearch+Kibana 爬取了知乎 60 万用户数据,做了简单的可视化分析。 项目源码 GitHub - webporter 动机 在知乎...

brianway
2016/12/20
9.1K
49
美国男女程序员的薪水相差不大

虽然程序员中女性所占的比例不高,但他们的薪水相差并不大。根据美国大学女性协会的研究,男女程序员之间的薪水没有统计上的差异。研究发现,女性程序员的薪水平均比男性少6.6%,但这一差异并...

oschina
2014/03/06
4.1K
39

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring boot中swagger2使用

1.pom.xml中添加 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version>......

说回答
9分钟前
0
0
tomcat虚拟路径的几种配置方法

tomcat虚拟路径的几种配置方法 一般我们都是直接引用webapps下面的web项目,如果我们要部署一个在其它地方的WEB项目,这就要在TOMCAT中设置虚拟路径了,Tomcat的加载web顺序是先加载 $Tomcat_ho...

Helios51
21分钟前
1
0
Mac 安装jupyter notebook的过程

MAC台式机 python:mac下自带Python 2.7.10 1.先升级了pip安装工具:sudo python -m pip install --upgrade --force pip 2.安装setuptools 工具:sudo pip install setuptools==33.1.1 3.安装......

火力全開
27分钟前
0
0
导航守卫解释与例子

“导航”表示路由正在发生改变。 正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。 记住...

tianyawhl
27分钟前
0
0
Java日志框架-logback配置文件多环境日志配置(开发、测试、生产)(原始解决方法)

说明:这种方式应该算是最通用的,原理是通过判断标签实现。 <!-- if-then form --> <if condition="some conditional expression"> <then> ... </then> </if> ......

浮躁的码农
41分钟前
1
0
FTP传输时的两种登录方式和区别

登录方式 匿名登录 用户名为: anonymous。 密码为:任何合法 email 地址。 授权登录 用户名为:用户在远程系统中的用户帐号。 密码为:用户在远程系统中的用户密码。 区别 匿名登录 只能访问...

寰宇01
42分钟前
0
0
plsql developer 配置监听(不安装oracle客户端)

plsql developer 配置监听(不安装oracle客户端)

微小宝
49分钟前
1
0
数据库(分库分表)中间件对比

本人的宗旨就是,能copy的,绝对不手写。 分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm。 根据一定的规则把数据文件(MYD)和索...

奔跑吧代码
53分钟前
2
0
Netty与Reactor模式详解

在学习Reactor模式之前,我们需要对“I/O的四种模型”以及“什么是I/O多路复用”进行简单的介绍,因为Reactor是一个使用了同步非阻塞的I/O多路复用机制的模式。 I/O的四种模型 I/0 操作 主要...

hutaishi
59分钟前
1
0
【2018.07.16学习笔记】【linux高级知识 20.16-20.19】

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

lgsxp
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部