SQL面试题:GROUP BY与胜负统计

需积分: 33 10 下载量 35 浏览量 更新于2024-09-18 收藏 50KB DOC 举报
"这篇资源主要涉及SQL数据库面试中的两道题目,主要考察SQL查询语句的编写能力,包括GROUP BY子句的运用以及对数据进行条件统计。" 第一道题目是关于使用SQL来统计每日比赛的胜败情况。给定的数据表#tmp包含了日期(rq)和胜负(shengfu)两列,要求生成的结果应展示每天的日期及对应的胜利场次(胜)和失败场次(负)。以下给出了三种不同的SQL解决方案: 1) 第一种方法利用了CASE WHEN语句来计算胜场和负场。在每个GROUP BY的日期(rq)分组内,CASE WHEN将'胜'转化为1,其他情况转化为0,然后进行求和,得到胜场和负场的总数。 ```sql SELECT rq, SUM(CASE WHEN shengfu = '胜' THEN 1 ELSE 0 END) AS '胜', SUM(CASE WHEN shengfu = '负' THEN 1 ELSE 0 END) AS '负' FROM #tmp GROUP BY rq; ``` 2) 第二种方法通过两个子查询分别计算胜场和负场,然后通过INNER JOIN将它们合并在一起。每个子查询先按日期分组,计算出胜或负的场次,再通过日期进行连接。 ```sql SELECT N.rq, N.勝, M.負 FROM ( SELECT rq, 勝 = COUNT(*) FROM #tmp WHERE shengfu = '胜' GROUP BY rq ) N INNER JOIN ( SELECT rq, 負 = COUNT(*) FROM #tmp WHERE shengfu = '负' GROUP BY rq ) M ON N.rq = M.rq; ``` 3) 第三种方法与第二种类似,也是通过子查询分别计算胜场和负场,然后通过WHERE子句匹配日期进行连接。 ```sql SELECT a.rq, a.a1 AS '胜', b.b1 AS '负' FROM ( SELECT rq, COUNT(rq) AS a1 FROM #tmp WHERE shengfu = '胜' GROUP BY rq ) a, ( SELECT rq, COUNT(rq) AS b1 FROM #tmp WHERE shengfu = '负' GROUP BY rq ) b WHERE a.rq = b.rq; ``` 第二道题目没有给出完整的描述,但从已有的信息来看,似乎要求根据A列的值来查询BC两列的数据。可能的SQL语句如下,假设是查询A列等于特定值时,B列和C列的组合: ```sql SELECT B, C FROM 表名 WHERE A = '特定值'; ``` 如果需要对B或C列进行特定操作,例如计算、分组或过滤,那么可以根据实际需求添加相应的函数或条件。 以上解答展示了SQL在处理数据统计和条件查询时的灵活性,对于面试者来说,理解并掌握这些技能对于应对SQL面试至关重要。