SQL面试必备:经典题目与解答解析
1星 需积分: 39 66 浏览量
更新于2024-07-20
5
收藏 135KB DOC 举报
"这篇资源是关于SQL面试题的解答,主要涵盖了一道涉及GROUP BY的题目,目的是展示如何统计特定日期的胜利和失败次数。"
在SQL面试中,GROUP BY语句是一个重要的概念,用于根据一个或多个列对数据进行分组。在给出的面试题中,目标是得到每日期(rq)的胜场('胜')和负场('负')的计数。以下是三种不同的解题方法:
1. 第一种方法利用了CASE WHEN语句来计算胜场和负场。首先,CASE WHEN语句检查shengfu字段是否等于'胜'或'负',如果是,则返回1,否则返回0。然后,使用SUM函数对每个日期的胜场和负场进行求和。GROUP BY子句按照日期(rq)进行分组。
```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. 第二种方法使用了两次嵌套的SELECT语句,分别计算胜场和负场的数量,然后通过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. 第三种方法也使用了两个嵌套的SELECT语句,但这次是在一个FROM子句中并行定义的。两个子查询分别计算'胜'和'负'的计数,并通过col001(这里假设对应于日期)将它们连接起来。这种方法适用于有不同列名表示胜败情况的情况。
```sql
SELECT a.col001, a.a1 AS '胜', b.b1 AS '负'
FROM (
SELECT col001, COUNT(col001) AS a1
FROM temp1
WHERE col002 = '胜'
GROUP BY col001
) a,
(
SELECT col001, COUNT(col001) AS b1
FROM temp1
WHERE col002 = '负'
GROUP BY col001
) b
WHERE a.col001 = b.col001
```
这些方法展示了SQL在处理分类统计时的灵活性,同时也考察了面试者对聚合函数、条件逻辑和JOIN操作的理解。在实际工作中,理解并熟练运用这些技巧对于数据库查询和数据分析至关重要。
2010-10-19 上传
2009-07-29 上传
2011-05-10 上传
102 浏览量
2010-10-10 上传
2010-07-09 上传
baiduwxz13yun
- 粉丝: 16
- 资源: 259
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器