Oracle 学习笔记之二 足球赛程统计问题
来源:互联网 发布:淘宝小工具 编辑:程序博客网 时间:2024/04/27 21:23
下面是一道 SQL 常见问题,觉得比较典型就拿出来。
题目描述:
球队表:
球队代码球队名称001 巴萨002皇马003巴伦西亚004国足球队比赛成绩表:
主场球队客场球队主场进球客场进球001002310030012200200301 要求通过 sql 获取下面结果:得分计算:球队获胜一场得3分,平一场得1分,其他情况不得分。
要求把所有球队的比赛相关成绩按上图示例的 sql 取数结果显示,并按球队编号升序排序。
相关脚本:
-- 创建表格create table footballTeam( team_id varchar2(8), --球队编号 team_name varchar2(32) --–球队名称);create table footballMatch( hostteam_id varchar2(8), --主场球队编号 guestteam_id varchar2(8), --客场球队编号 host_goal number,--主场球队进球数 guest_goal number--客场球队进球数);-- 插入数据insert into footballteam values('001','巴萨');insert into footballteam values('002','皇马');insert into footballteam values('003','巴伦西亚');insert into footballteam values('004','国足');insert into footballmatch values('001','002',3,1);insert into footballmatch values('003','001',2,2);insert into footballmatch values('002','003',0,1);insert into footballmatch values('002','001',0,1);commit;
楼主觉得这道题只需以正常的思维去想,就简单了。觉得有一点可以取巧,就是 sql 结果中有些字段可以通过其他字段计算所得,如果想一次性全显示出来,似乎又不能计算虚拟字段,问题出来了。这里有个办法,可以将不需计算的字段先取出成一张表 t 再以这张表格的字段计算的相应的字段,例如:得分=获胜场次* 3+ 打平场次,这样就可以节省很多代码了。上代码:
SELECT TEAM_ID, TEAM_NAME, 总比赛场次, 获胜场次, 打平场次, (总比赛场次 - 获胜场次 - 打平场次) AS 输球场次, 进球数, 失球数, 获胜场次 * 3 + 打平场次 AS 得分 FROM (SELECT A.TEAM_ID, A.TEAM_NAME, (SELECT COUNT(*) FROM FOOTBALLMATCH WHERE HOSTTEAM_ID = A.TEAM_ID OR GUESTTEAM_ID = A.TEAM_ID) AS 总比赛场次, (SELECT COUNT(*) FROM FOOTBALLMATCH WHERE (HOSTTEAM_ID = A.TEAM_ID AND HOST_GOAL > GUEST_GOAL) OR (GUESTTEAM_ID = A.TEAM_ID AND HOST_GOAL < GUEST_GOAL)) AS 获胜场次, (SELECT COUNT(*) FROM FOOTBALLMATCH WHERE (HOSTTEAM_ID = A.TEAM_ID AND HOST_GOAL = GUEST_GOAL) OR (GUESTTEAM_ID = A.TEAM_ID AND HOST_GOAL = GUEST_GOAL)) AS 打平场次, (SELECT SUM(HOST_GOAL) FROM FOOTBALLMATCH WHERE HOSTTEAM_ID = A.TEAM_ID) + (SELECT SUM(GUEST_GOAL) FROM FOOTBALLMATCH WHERE GUESTTEAM_ID = A.TEAM_ID) AS 进球数, (SELECT SUM(GUEST_GOAL) FROM FOOTBALLMATCH WHERE HOSTTEAM_ID = A.TEAM_ID) + (SELECT SUM(HOST_GOAL) FROM FOOTBALLMATCH WHERE GUESTTEAM_ID = A.TEAM_ID) AS 失球数 FROM FOOTBALLTEAM A) T ORDER BY T.TEAM_ID;
对于类似的题目都可用此法,希望对你有帮助。欢迎提供更好的方法!
- Oracle 学习笔记之二 足球赛程统计问题
- oracle数据库学习笔记(二)之分组统计查询
- oracle学习笔记之二
- Oracle学习笔记之二
- 分治算法之赛程安排问题
- Oracle基础学习二之统计函数及分组查询
- Oracle学习笔记之二----SQL
- Oracle学习笔记之二 数据字典
- 《统计学习方法》学习笔记二
- [oracle学习笔记]之二:oracle常用函数
- oracle学习笔记(二)
- Oracle学习笔记(二)
- Oracle学习笔记(二)
- oracle学习笔记二
- oracle学习笔记(二)
- oracle学习笔记二
- oracle学习笔记 二
- oracle 学习笔记(二)
- 关于EOF(文件结束符)问题的体会
- 匿名类型
- 用IO流去切割与合并文件
- PHP学习笔记-GD库作图
- DIV 滚动条
- Oracle 学习笔记之二 足球赛程统计问题
- Android应用程序如何获取root权限
- Race to 1 UVA11762
- Python文件读写
- linux内核同步
- 编码练习2
- MATcom
- 哈尔滨seo 是我新的方向
- android界面像素单位