MySQL8.0.31统计男女生人数及比例

一  创建测试表

DROP TABLE IF EXISTS `persion`;
CREATE TABLE `persion`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '唯一标识',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '名称',
  `age` int(0) NULL DEFAULT NULL COMMENT '年龄',
  `sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '性别',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of persion
-- ----------------------------
INSERT INTO `persion` VALUES (1, '张三', 18, '男');
INSERT INTO `persion` VALUES (2, '李四', 28, '男');
INSERT INTO `persion` VALUES (3, '王五', 38, '男');
INSERT INTO `persion` VALUES (4, '小红', 20, '女');
INSERT INTO `persion` VALUES (5, '小美', 21, '女');

二 查询男女生人数

        2.1 SQL语句

SELECT
	sum( CASE WHEN sex = '男' THEN 1 ELSE 0 END ) AS 男生人数,
	sum( CASE WHEN sex = '女' THEN 1 ELSE 0 END ) AS 女生人数,
	count( sex ) AS 总人数 
FROM
	persion

         2,2 结果展示

MySQL8.0.31统计男女生人数及比例_第1张图片

 三 查询男女生比例

        3.1 SQL语句

SELECT
	CONCAT( round( sum( CASE WHEN sex = '男' THEN 1 ELSE 0 END )* 100 / count( sex ), 2 ), '%' ) AS 男比例,
	CONCAT( round( sum( CASE WHEN sex = '女' THEN 1 ELSE 0 END )* 100 / count( sex ), 2 ), '%' ) AS 女比例,
	count( sex ) AS 总人数 
FROM
	persion

        3.2 结果展示

MySQL8.0.31统计男女生人数及比例_第2张图片

 四 语句所用到的MySQL函数说明

-- concat('str','str',...)字符串拼接
select concat('ab','cd')	-- abcd
-- round(num,n) 保留几位小数
select round(1.234,2) -- 1.23
-- sum(字段) 可用来统计字段内数字型函数的值之和
select sum(age) from persion -- 125 统计年龄之和
-- count (字段) 可用统计记录个数
select count(sex) from persion -- 5 一共5条记录
--  CASE WHEN sex = '男' THEN 1 ELSE 0 END 解释:如果 sex='男',记为 数字1 否则为 0 

 

你可能感兴趣的:(数据库,mysql,数据库,java)