V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
miaojh
V2EX  ›  问与答

mysql 两张表关联查询的 sql 怎么写?

  •  1
     
  •   miaojh · 2018-02-26 09:14:58 +08:00 · 3442 次点击
    这是一个创建于 2467 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有两张表 a 和 b,两张表,现在需要根据 a 表中 分数 查询出 学生实际的得分情况

    a 表
    name 得分
    张三 55
    李四 60
    王五 85


    b 表
    分数 所占比例%
    0 0
    20 5
    40 10
    60 40
    80 60
    100 80

    现在需要查询出 他们实际得到的分数 例如:
    1.张三 分数 55 在 b 表中 大于 40 小于 60 所占比例为 10 故 张三得到的实际分数为 55*10%=5.5
    2.李四 分数 60 在 b 表中 大于等于 60 小于 80 所占比例为 40 故 张三得到的实际分数为 60*40%=24
    需要得到的结果如下
    name 分数 实际分数
    张三 55 5.5
    李四 60 24
    3 条回复    2018-02-26 09:54:48 +08:00
    tradzero
        1
    tradzero  
       2018-02-26 09:37:05 +08:00 via Android   ❤️ 2
    意思现在作业也放在 v2 上问?
    king2014
        2
    king2014  
       2018-02-26 09:40:31 +08:00
    B 表的意义是?
    直接代码逻辑判断不行吗?
    我看 B 表就是一个分数区间占比
    Tokin
        3
    Tokin  
       2018-02-26 09:54:48 +08:00   ❤️ 1
    为什么不直接查出来然后再计算实际分数。。。
    SQL 查询的时候坐算术运算不嫌占资源么
    按照你现有的表结构我还不知道怎么写,但是改了一下 B 表可以很方便的查询出结果
    SQL 语句如下:
    SELECT a.`name` '姓名', a.`score` '分数', a.`score`*(b.scale/100) '占比'
    FROM `a` a
    LEFT JOIN `b` b ON (a.`score` BETWEEN b.`range1` AND b.`range2`)
    B 表结构:

    其实就是加了一个区间
    查询结果如下:
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3266 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 681ms · UTC 12:07 · PVG 20:07 · LAX 04:07 · JFK 07:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.