我的数据库如下所示:
前三列是赔率(如概率)。第四列是指前三列之一。
我需要知道每行中的第四列是否指前三列中值最低的列。检查这一点的查询应该返回一个布尔结果:如果第四列引用具有最低值的列,则为 true,否则为 false。
例如:
- 第 1 行的最小值是 1.7,在第 1 列中。第 1 行中的第 4列。结果:是的。
- 第 5 行的最小值是 1.71,在第 1 列中。此行中的第 4 列是2。结果:假。
您可以通过 CASE 语句和比较来解决这个问题。
您将使用 case 选择由第 4 列指定的列的值,并检查这是否是 3 列中最小的。
类似于以下内容:
select
CASE
WHEN COLUMN4 = 1 THEN COLUMN1 = LEAST(COLUMN1,COLUMN2, COLUMN3)
WHEN COLUMN4 = 2 THEN COLUMN2 = LEAST(COLUMN1,COLUMN2, COLUMN3)
WHEN COLUMN4 = 3 THEN COLUMN3 = LEAST(COLUMN1,COLUMN2, COLUMN3)
END
from TABLE;
更新:
这里也是一个 SQL Fiddle:http ://www.sqlfiddle.com/#!2/61c18/5
更新 SQL 以将文本显示为“真”和“假”
select
IF(
CASE
WHEN COLUMN4 = 1 THEN COLUMN1 = LEAST(COLUMN1,COLUMN2, COLUMN3)
WHEN COLUMN4 = 2 THEN COLUMN2 = LEAST(COLUMN1,COLUMN2, COLUMN3)
WHEN COLUMN4 = 3 THEN COLUMN3 = LEAST(COLUMN1,COLUMN2, COLUMN3)
END
,
'true','false')
as FOUND_SMALLEST
from TEST;
SELECT (LEAST(col1, col2, col3) > col4) as result FROM whatever_table_this_is;