SQL面试题:GROUP BY与胜负统计
需积分: 33 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面试至关重要。
114 浏览量
282 浏览量
109 浏览量
264 浏览量
688 浏览量
204 浏览量
2008-09-13 上传
414 浏览量
2022-06-21 上传
janewesion
- 粉丝: 0
- 资源: 3