一个关于 #LAMP面试题# 详解

时间:2022-03-22 12:53:14

今天无意间看见了一个 #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
  1. 方案三
-- 采取子查询的方式 
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