SQL面试必备:经典题解析——统计胜负记录
需积分: 10 147 浏览量
更新于2024-09-09
收藏 29KB DOC 举报
"这篇文档包含了SQL的经典面试题及其答案,主要关注的是如何使用SQL进行数据分组和计数,特别是涉及到GROUP BY语句的应用。"
在SQL面试中,经常会遇到涉及数据聚合和分类的问题,本题就是这样一个例子。题目要求根据日期(rq)统计每个日期中“胜”和“负”的次数,输出格式为日期后面分别跟随胜和负的次数。以下三个SQL语句给出了不同的解决方案:
1. 第一个查询使用了CASE语句和GROUP BY语句。CASE语句在这里用于根据胜或负的情况将1或0分配给每个记录,然后通过SUM函数对每个日期的胜和负进行求和。GROUP BY语句按照日期进行分组,确保统计结果按日期划分。
```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的方法。首先,创建两个子查询,分别计算出每个日期的胜和负的次数,然后通过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. 第三个查询同样使用了子查询,但这里每个子查询返回的是一个带有计数的列,然后通过这些列进行JOIN操作。这种方法也是基于GROUP BY对数据进行分类和计数。
```sql
SELECT a.col001, a.a1 '胜', b.b1 '负'
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面试中,展示你对数据处理的不同方法和对SQL语句灵活性的理解是至关重要的。
2023-04-08 上传
2023-07-13 上传
2023-10-19 上传
2023-07-15 上传
2023-07-20 上传
2023-06-08 上传
hzj9118
- 粉丝: 18
- 资源: 101
最新资源
- 探索AVL树算法:以Faculdade Senac Porto Alegre实践为例
- 小学语文教学新工具:创新黑板设计解析
- Minecraft服务器管理新插件ServerForms发布
- MATLAB基因网络模型代码实现及开源分享
- 全方位技术项目源码合集:***报名系统
- Phalcon框架实战案例分析
- MATLAB与Python结合实现短期电力负荷预测的DAT300项目解析
- 市场营销教学专用查询装置设计方案
- 随身WiFi高通210 MS8909设备的Root引导文件破解攻略
- 实现服务器端级联:modella与leveldb适配器的应用
- Oracle Linux安装必备依赖包清单与步骤
- Shyer项目:寻找喜欢的聊天伙伴
- MEAN堆栈入门项目: postings-app
- 在线WPS办公功能全接触及应用示例
- 新型带储订盒订书机设计文档
- VB多媒体教学演示系统源代码及技术项目资源大全