• 1440. 计算布尔表达式的值(常看看)


    SQL架构

    表 Variables:

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | name          | varchar |
    | value         | int     |
    +---------------+---------+
    name 是该表主键.
    该表包含了存储的变量及其对应的值.
    

    表 Expressions:

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | left_operand  | varchar |
    | operator      | enum    |
    | right_operand | varchar |
    +---------------+---------+
    (left_operand, operator, right_operand) 是该表主键.
    该表包含了需要计算的布尔表达式.
    operator 是枚举类型, 取值于('<', '>', '=')
    left_operand 和 right_operand 的值保证存在于 Variables 表单中.
    

    写一个 SQL 查询,  以计算表 Expressions 中的布尔表达式.

    返回的结果表没有顺序要求.

    查询结果格式如下例所示.

    Variables 表:
    +------+-------+
    | name | value |
    +------+-------+
    | x    | 66    |
    | y    | 77    |
    +------+-------+
    
    Expressions 表:
    +--------------+----------+---------------+
    | left_operand | operator | right_operand |
    +--------------+----------+---------------+
    | x            | >        | y             |
    | x            | <        | y             |
    | x            | =        | y             |
    | y            | >        | x             |
    | y            | <        | x             |
    | x            | =        | x             |
    +--------------+----------+---------------+
    
    Result 表:
    +--------------+----------+---------------+-------+
    | left_operand | operator | right_operand | value |
    +--------------+----------+---------------+-------+
    | x            | >        | y             | false |
    | x            | <        | y             | true  |
    | x            | =        | y             | false |
    | y            | >        | x             | true  |
    | y            | <        | x             | false |
    | x            | =        | x             | true  |
    +--------------+----------+---------------+-------+
    如上所示, 你需要通过使用 Variables 表来找到 Expressions 表中的每一个布尔表达式的值.
    1. select
    2. s1.left_operand,s1.operator,s1.right_operand,
    3. if(case
    4. when s1.operator = '>' then s1.value > v2.value
    5. when s1.operator = '<' then s1.value < v2.value # 用 case 创造 x > Y ...
    6. when s1.operator = '=' then s1.value = v2.value
    7. end = 1,'true','false') value
    8. from
    9. (
    10. select
    11. e.left_operand,e.operator,e.right_operand, v.value
    12. from
    13. Expressions e left join variables v
    14. on e.left_operand = v.name
    15. ) s1 left join variables v2
    16. on s1.right_operand = v2.name

    case 放列名的用法  case  operand
    when '>' ...
    when '<' ...     :

    1. select e.left_operand,e.operator,e.right_operand,
    2. case e.operator
    3. when '>' then if(v1.value>v2.value,'true','false')
    4. when '<' then if(v1.value<v2.value,'true','false')
    5. else if(v1.value=v2.value,'true','false')
    6. end value
    7. from Expressions e
    8. left join Variables v1 on v1.name = e.left_operand
    9. left join Variables v2 on v2.name = e.right_operand

  • 相关阅读:
    远程连接PostgreSQL:配置指南与安全建议
    可托拉拽的WPF选项卡控件,强大好用!
    加密大崩盘,Web3游戏到底还有没有未来?5篇论文深度探讨
    MyBatisPlus-02
    SQL左连接实战案例
    图像分类模型训练总结1
    CentOS配网报错:network is unreachable
    Qt开发之路--模块化设计.pri文件
    论文4问O
    卷积神经网络(Convolutional Neural Networks,CNN)
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125478504