1440. Evaluate Boolean Expression π
Description
Table Variables
:
+---------------+---------+ | Column Name | Type | +---------------+---------+ | name | varchar | | value | int | +---------------+---------+ In SQL, name is the primary key for this table. This table contains the stored variables and their values.
Table Expressions
:
+---------------+---------+ | Column Name | Type | +---------------+---------+ | left_operand | varchar | | operator | enum | | right_operand | varchar | +---------------+---------+ In SQL, (left_operand, operator, right_operand) is the primary key for this table. This table contains a boolean expression that should be evaluated. operator is an enum that takes one of the values ('<', '>', '=') The values of left_operand and right_operand are guaranteed to be in the Variables table.
Evaluate the boolean expressions in Expressions
table.
Return the result table in any order.
The result format is in the following example.
Example 1:
Input: Variables table: +------+-------+ | name | value | +------+-------+ | x | 66 | | y | 77 | +------+-------+ Expressions table: +--------------+----------+---------------+ | left_operand | operator | right_operand | +--------------+----------+---------------+ | x | > | y | | x | < | y | | x | = | y | | y | > | x | | y | < | x | | x | = | x | +--------------+----------+---------------+ Output: +--------------+----------+---------------+-------+ | left_operand | operator | right_operand | value | +--------------+----------+---------------+-------+ | x | > | y | false | | x | < | y | true | | x | = | y | false | | y | > | x | true | | y | < | x | false | | x | = | x | true | +--------------+----------+---------------+-------+ Explanation: As shown, you need to find the value of each boolean expression in the table using the variables table.
Solutions
Solution 1: Equi-Join + CASE Expression
We can associate each row in the Expressions
table with two rows in the Variables
table using an equi-join, where the conditions for the association are left_operand = name
and right_operand = name
. Then, we can use a CASE
expression to determine the value of the boolean expression. If the operator
is =
, we check if the two values are equal. If the operator
is >
, we check if the left value is greater than the right value. If the operator
is <
, we check if the left value is less than the right value. If the condition is true, the boolean expression evaluates to true
, otherwise it evaluates to false
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|