SQL- 如何比较同一行中的两个数字
SQL- How to compare two numbers in the same row
我正在 Oracle Apex 中创建一个数据库,我基本上需要比较同一行中的两个数字,以便找到最大的一个。下面的示例 table;
使用上面的示例,我将如何比较同一行中的数字 1 和数字 2,例如将第一行的 6 与 7 进行比较,然后将第二行的 3 与 1 进行比较。
如果你的数字有最小值(即它们都是正整数)那么你可以这样做:
Oracle 设置:
CREATE TABLE table_name ( ID, name, number1, number2, number3 ) AS
SELECT 1, 'Jane', 6, 7, 1 FROM DUAL UNION ALL
SELECT 2, 'John', 3, 1, NULL FROM DUAL UNION ALL
SELECT 3, 'Jake', NULL, NULL, 5 FROM DUAL;
查询:
SELECT ID,
NAME,
GREATEST( NVL( NUMBER1, 0 ), NVL( NUMBER2, 0 ), NVL( NUMBER3, 0 ) ) AS biggest
FROM table_name;
输出:
ID NAME BIGGEST
---------- ---- ----------
1 Jane 7
2 John 3
3 Jake 5
如果没有最小值那么你可以这样做:
查询 2:
SELECT ID,
NAME,
CASE WHEN NUMBER1 IS NULL AND NUMBER2 IS NULL AND NUMBER3 IS NULL
THEN NULL
WHEN NUMBER1 IS NULL AND NUMBER2 IS NULL THEN NUMBER3
WHEN NUMBER1 IS NULL AND NUMBER3 IS NULL THEN NUMBER2
WHEN NUMBER2 IS NULL AND NUMBER3 IS NULL THEN NUMBER1
WHEN NUMBER1 IS NULL THEN GREATEST( NUMBER2, NUMBER3 )
WHEN NUMBER2 IS NULL THEN GREATEST( NUMBER1, NUMBER3 )
WHEN NUMBER3 IS NULL THEN GREATEST( NUMBER1, NUMBER2 )
ELSE GREATEST( NUMBER1, NUMBER2, NUMBER3 )
END AS biggest
FROM table_name;
我正在 Oracle Apex 中创建一个数据库,我基本上需要比较同一行中的两个数字,以便找到最大的一个。下面的示例 table;
使用上面的示例,我将如何比较同一行中的数字 1 和数字 2,例如将第一行的 6 与 7 进行比较,然后将第二行的 3 与 1 进行比较。
如果你的数字有最小值(即它们都是正整数)那么你可以这样做:
Oracle 设置:
CREATE TABLE table_name ( ID, name, number1, number2, number3 ) AS
SELECT 1, 'Jane', 6, 7, 1 FROM DUAL UNION ALL
SELECT 2, 'John', 3, 1, NULL FROM DUAL UNION ALL
SELECT 3, 'Jake', NULL, NULL, 5 FROM DUAL;
查询:
SELECT ID,
NAME,
GREATEST( NVL( NUMBER1, 0 ), NVL( NUMBER2, 0 ), NVL( NUMBER3, 0 ) ) AS biggest
FROM table_name;
输出:
ID NAME BIGGEST
---------- ---- ----------
1 Jane 7
2 John 3
3 Jake 5
如果没有最小值那么你可以这样做:
查询 2:
SELECT ID,
NAME,
CASE WHEN NUMBER1 IS NULL AND NUMBER2 IS NULL AND NUMBER3 IS NULL
THEN NULL
WHEN NUMBER1 IS NULL AND NUMBER2 IS NULL THEN NUMBER3
WHEN NUMBER1 IS NULL AND NUMBER3 IS NULL THEN NUMBER2
WHEN NUMBER2 IS NULL AND NUMBER3 IS NULL THEN NUMBER1
WHEN NUMBER1 IS NULL THEN GREATEST( NUMBER2, NUMBER3 )
WHEN NUMBER2 IS NULL THEN GREATEST( NUMBER1, NUMBER3 )
WHEN NUMBER3 IS NULL THEN GREATEST( NUMBER1, NUMBER2 )
ELSE GREATEST( NUMBER1, NUMBER2, NUMBER3 )
END AS biggest
FROM table_name;