SQL面试题:按日期统计胜负次数
需积分: 33 133 浏览量
更新于2024-10-01
1
收藏 50KB DOC 举报
在SQL语句面试题中,面试者经常被问及如何处理数据聚合和计数的问题。以下是一些常见的问题和解决方案:
1. 题目要求统计每个日期的胜场和负场次数,给出的比赛结果记录在`#tmp`表中,字段包括日期`rq`和比赛结果`shengfu`。题目要求的结果格式是日期和对应的胜败次数,例如'2005-05-09' 22(胜2次,负2次)和'2005-05-10' 12(胜1次,负2次)。这里提供了三种可能的SQL语句来实现这个目标:
- 第一种方法使用`CASE`语句和`SUM()`函数,计算每条记录的胜败值并按日期分组:
```
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;
```
这个查询会返回每条日期及其对应的胜败计数。
- 第二种方法利用子查询,通过`INNER JOIN`连接两个分别统计胜败次数的子查询:
```
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;
```
这里首先计算每个日期的胜败数量,然后通过日期匹配合并结果。
- 第三种方法使用两个独立的`SELECT`语句,分别对胜败情况进行计数,然后通过`WHERE`子句筛选出相同日期的记录:
```
SELECT a.rq, a.a1 as 胜, b.b1 as 负
FROM (
SELECT rq, COUNT(rq) as a1
FROM #tmp
WHERE shengfu = '胜'
GROUP BY rq
) a
JOIN (
SELECT rq, COUNT(rq) as b1
FROM #tmp
WHERE shengfu = '负'
GROUP BY rq
) b
ON a.rq = b.rq;
```
这里同样基于日期进行匹配,并计算各自的胜败计数。
2. 另一个问题涉及一张包含A、B、C三列的表,要求实现特定条件的查询,但题目没有给出具体条件。如果需要根据A列的某个值过滤数据,比如查找A列等于某个值的所有行,可以使用`WHERE`子句。假设我们想找出A列等于'def'的所有行:
```
SELECT *
FROM 表名
WHERE A = 'def';
```
如果需要统计符合条件的行数,可以替换`*`为`COUNT(*)`,例如:
```
SELECT COUNT(*)
FROM 表名
WHERE A = 'def';
```
以上两种情况都展示了在SQL查询中处理条件过滤和数据聚合的基本技巧。面试时,熟悉这些操作并且能够灵活运用是关键。
2022-11-11 上传
2008-12-24 上传
2011-11-23 上传
2023-05-15 上传
2024-07-24 上传
2023-05-17 上传
2023-05-19 上传
2024-05-29 上传
2023-07-21 上传
taoy_2008
- 粉丝: 4
- 资源: 19
最新资源
- BGP协议首选值(PrefVal)属性与模拟组网实验
- C#实现VS***单元测试coverage文件转xml工具
- NX二次开发:UF_DRF_ask_weld_symbol函数详解与应用
- 从机FIFO的Verilog代码实现分析
- C语言制作键盘反应力训练游戏源代码
- 简约风格毕业论文答辩演示模板
- Qt6 QML教程:动态创建与销毁对象的示例源码解析
- NX二次开发函数介绍:UF_DRF_count_text_substring
- 获取inspect.exe:Windows桌面元素查看与自动化工具
- C语言开发的大丰收游戏源代码及论文完整展示
- 掌握NX二次开发:UF_DRF_create_3pt_cline_fbolt函数应用指南
- MobaXterm:超越Xshell的远程连接利器
- 创新手绘粉笔效果在毕业答辩中的应用
- 学生管理系统源码压缩包下载
- 深入解析NX二次开发函数UF-DRF-create-3pt-cline-fcir
- LabVIEW用户登录管理程序:注册、密码、登录与安全