SQL面试题集:按日期统计胜负
需积分: 13 124 浏览量
更新于2024-09-18
收藏 33KB DOC 举报
在SQL面试中,关于GROUP BY的题目是常见的一类考察点,这道题目涉及到对表格数据进行分组并计算每个分组的特定条件下的计数。给出的问题背景是一个名为`#tmp`的临时表,其中包含了比赛日期`rq`和比赛结果`shengfu`,数据包括了多个比赛日的胜利和失败情况。
题目要求根据`rq`字段生成两个结果:一是每场比赛日的胜利次数(记为“胜”),二是失败次数(记为“负”)。下面是三种可能的SQL查询方式:
1. 使用SUM()函数和CASE WHEN子句:
```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;
```
这个查询会为每个比赛日计算胜败次数,通过CASE WHEN语句分别计数胜利和失败。
2. 使用连接和子查询:
```sql
SELECT N.rq, N.勝, M.負
FROM (
SELECT rq, COUNT(*) AS '勝'
FROM #tmp
WHERE shengfu = '胜'
GROUP BY rq
) N
INNER JOIN (
SELECT rq, COUNT(*) AS '負'
FROM #tmp
WHERE shengfu = '负'
GROUP BY rq
) M ON N.rq = M.rq;
```
这里首先对胜利和失败的比赛进行分组计数,然后通过INNER JOIN将两个计数结果表连接在一起,依据比赛日`rq`相同。
3. 使用间接的方式,假设有一个`temp1`表与`#tmp`表有相似结构,但只包含'胜'的结果,可以这样计算:
```sql
SELECT a.col001, a.a1 AS '胜', b.b1 AS '负'
FROM (
SELECT col001, COUNT(*) AS a1
FROM temp1
WHERE col002 = '胜'
GROUP BY col001
) a
LEFT JOIN (
-- 假设b表用于统计失败次数,需类似构造
) b ON a.col001 = b.col001;
```
此查询先在`temp1`中计算胜利次数,然后通过LEFT JOIN关联一个假设存在的失败计数表`b`。
以上三种方法都可以解决这个问题,面试时可以根据自己的理解和偏好选择最合适的解决方案。同时,面试官可能会关注到查询的效率、性能优化以及对SQL聚合函数和连接操作的理解程度。
2024-08-31 上传
2023-05-19 上传
2023-07-27 上传
2023-07-13 上传
2023-05-10 上传
2023-05-26 上传
2023-05-14 上传
2024-09-08 上传
2023-07-20 上传
危险不在
- 粉丝: 0
- 资源: 3
最新资源
- Google Test 1.8.x版本压缩包快速下载指南
- Java实现二叉搜索树的插入与查找功能
- Python库丰富性与数据可视化工具Matplotlib
- MATLAB通信仿真设计源代码与应用解析
- 响应式环保设备网站模板源码下载
- 微信小程序答疑平台完整设计源码案例
- 全元素DFT计算所需赝势UPF文件集合
- Object-C实现的Flutter组件开发详解
- 响应式环境设备网站模板下载 - 恒温恒湿机营销平台
- MATLAB绘图示例与知识点深入探讨
- DzzOffice平台新插件:excalidraw白板功能介绍与使用指南
- Java基础实训教程:电子商城项目开发与实践
- 物业集团管理系统数据库设计项目完整复刻包
- 三五族半导体能带参数计算器:精准模拟与应用
- 毕业论文:基于SSM框架的毕业生跟踪调查反馈系统设计与实现
- 国产化数据库适配:人大金仓与达梦实践教程