sql 面试题解析

一、表TB,Id字段编号,递增不一定连续,M 字段为区段路费,比如从家到哈尔滨60元,从哈尔滨到长春70元,数值类型, S字段站点名称。 现有500元,从家先经哈尔滨出发,能走多远?
Id M S          
1 60 哈尔滨 
2 70 长春
3 80 沈阳
4 50 北京
5 90 郑州
6 75 武汉
7 80 长沙
8 90 广东
请用一句sql语句实现。

解析:首先分析出这道题需要求和比较,找到ID然后找出站点位置。所以这个需要用到自连接。根据ID大小作为判断条件。

SELECT  B.ID AS BID,B.S AS B_S,B.M AS BM,A.ID AS AID ,A.M AS AM,A.S AS A_S FROM TB A,TB B WHERE A.ID<=B.ID 

得到结果如下:

BID B_S BM AID AM A_S
1 哈尔滨 60 1 60 哈尔滨
2 长春 70 1 60 哈尔滨
2 长春 70 2 70 长春
3 沈阳 80 1 60 哈尔滨
3 沈阳 80 2 70 长春
3 沈阳 80 3 80 沈阳
4 北京 50 1 60 哈尔滨
4 北京 50 2 70 长春
4 北京 50 3 80 沈阳
4 北京 50 4 50 北京
5 郑州 90 1 60 哈尔滨
5 郑州 90 2 70 长春
5 郑州 90 3 80 沈阳
5 郑州 90 4 50 北京
5 郑州 90 5 90 郑州
6 武汉 75 1 60 哈尔滨
6 武汉 75 2 70 长春
6 武汉 75 3 80 沈阳
6 武汉 75 4 50 北京
6 武汉 75 5 90 郑州
6 武汉 75 6 75 武汉
7 长沙 80 1 60 哈尔滨
7 长沙 80 2 70 长春
7 长沙 80 3 80 沈阳
7 长沙 80 4 50 北京
7 长沙 80 5 90 郑州
7 长沙 80 6 75 武汉
7 长沙 80 7 80 长沙
8 广东 90 1 60 哈尔滨
8 广东 90 2 70 长春
8 广东 90 3 80 沈阳
8 广东 90 4 50 北京
8 广东 90 5 90 郑州
8 广东 90 6 75 武汉
8 广东 90 7 80 长沙
8 广东 90 8 90 广东

 

进行分组求和然后找到求和小于500的最大ID的第一条记录即可

SELECT TOP 1 B.ID,B.S,SUM(A.M) AS sum_m FROM TB A,TB B
WHERE A.ID<=B.ID
GROUP BY B.ID,B.S
HAVING SUM(A.M)<=500
ORDER BY B.ID DESC

 

转载于:https://www.cnblogs.com/cuig/p/7797708.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值