zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    视频直播和实时音视频区别调研
    MySQL5.7 并行复制
    MySQL5.7 并行复制
    SSH 超时设置
    有赞透明多级缓存解决方案(TMC)设计思路
    有赞透明多级缓存解决方案(TMC)设计思路
    spring.net异常处理
    python之for学习
    pyhton小方法
    时间戳处理
  • 原文地址:https://www.cnblogs.com/cuig/p/7797708.html
Copyright © 2011-2022 走看看