SQL面试必备:CASE语句解决经典问题
需积分: 36 123 浏览量
更新于2024-12-14
收藏 47KB DOC 举报
"这篇资源是关于SQL面试题的解答,特别是涉及到如何使用CASE语句来处理数据统计的问题。主要目标是帮助面试者更好地理解和应用Oracle数据库优化技术。"
在SQL面试中,CASE语句是一个非常重要的工具,它允许我们在一个查询中进行条件判断并返回不同的值。在提供的面试题中,目标是统计每个日期(rq)对应的胜场(胜)和负场(负)的数量。以下是三种不同的解冔方案:
1) 第一种方法直接在同一个SELECT语句中使用CASE语句。通过SUM函数与CASE结合,当shengfu字段等于'胜'时,计数为1,否则为0。然后根据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) 第二种方法使用两个子查询,分别计算胜场和负场,然后通过INNER JOIN将它们合并。每个子查询都根据rq分组并计算对应结果,之后通过ON子句连接相同rq的记录。
```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
```
3) 第三种方法也是使用两个子查询,但这次是通过SELECT ... FROM ... AS ... 的方式创建临时表格A和B,分别代表胜场和负场的统计数据,然后再通过WHERE子句匹配col001(相当于rq)来组合结果。
```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
```
这些解冔方案都有效地解决了题目所提出的问题,展示了CASE语句在统计分析中的强大功能。在面试或实际工作中,理解并熟练运用这些技巧对于处理复杂的数据分析任务至关重要,尤其是在优化数据库性能方面。
2010-09-26 上传
2010-10-19 上传
2010-07-09 上传
2008-12-17 上传
2011-04-10 上传
2010-10-10 上传
2010-01-21 上传
2008-03-14 上传
2012-04-22 上传
oraclewlm
- 粉丝: 1
- 资源: 28
最新资源
- Cucumber-JVM模板项目快速入门教程
- ECharts打造公司组织架构可视化展示
- DC Water Alerts 数据开放平台介绍
- 图形化编程打造智能家居控制系统
- 个人网站构建:使用CSS实现风格化布局
- 使用CANBUS控制LED灯柱颜色的Matlab代码实现
- ACTCMS管理系统安装与更新教程
- 快速查看IP地址及地理位置信息的View My IP插件
- Pandas库助力数据分析与编程效率提升
- Python实现k均值聚类音乐数据可视化分析
- formdotcom打造高效网络表单解决方案
- 仿京东套餐购买列表源码DYCPackage解析
- 开源管理工具orgParty:面向PartySur的多功能应用程序
- Flutter时间跟踪应用Time_tracker入门教程
- AngularJS实现自定义滑动项目及动作指南
- 掌握C++编译时打印:compile-time-printer的使用与原理