今天无意间看见了一个 #LAMP面试题#,觉得有点意思,就亲测了下,把结果分享出来。O(∩_∩)O~
有一个用户表 table,里面有一个性别字段 xb(男,女),请写一条 SQL,查询“总人数”及“男生人数”。
☆ 建表
/*
Navicat MySQL Data Transfer
Source Server : 本地
Source Server Version : 50045
Source Host : localhost:3306
Source Database : mysql
Target Server Type : MYSQL
Target Server Version : 50045
File Encoding : 65001
Date: 2016-02-27 21:25:06
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for table
-- ----------------------------
DROP TABLE IF EXISTS `table`;
CREATE TABLE `table` (
`xb` text character set utf8 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of table
-- ----------------------------
INSERT INTO `table` VALUES ('男');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('男');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('男');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('女');
INSERT INTO `table` VALUES ('男');
INSERT INTO `table` VALUES ('女');
☆查询语句
- 方案一(推荐方案)
-- SUM(`IF`(条件,条件真,条件假))
SELECT COUNT(*) AS '总人数',SUM(if(xb="男",1,0)) AS '男生人数' FROM `table`;
总人数 | 男生人数 |
---|---|
21 | 4 |
- 方案二
-- CASE WHEN THEN ELSE END
SELECT COUNT(*) AS '总人数',SUM(CASE xb WHEN '男' THEN 1 ELSE 0 END) AS '男生人数' FROM `table`
总人数 | 男生人数 |
---|---|
21 | 4 |
- 方案三
-- 采取子查询的方式
SELECT (SELECT COUNT(*) FROM `table`) AS '总人数',COUNT(*) AS '男生人数' FROM `table` WHERE xb='男' GROUP BY xb;
总人数 | 男生人数 |
---|---|
21 | 4 |
题目二:
一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球队。现在四个球队进行比赛,用一条sql 语句显示所有可能的比赛组合。
select a.name, b.name
from team a, team b
where a.name < b.name