Как рассчитать максимум двух чисел в Oracle SQL select?

Это должно быть просто и показывает мое незнание SQL:

SQL> select max(1,2) from dual;
select max(1,2) from dual
       *
ERROR at line 1:
ORA-00909: invalid number of arguments

Я знаю, что max обычно используется для агрегатов. Что я могу использовать здесь?

В конце я хочу использовать что-то вроде

select total/max(1,number_of_items) from xxx;

, где number_of_items является целым числом и может быть 0. Я хочу видеть итоговое значение и в этом случае.

27
задан Peter G. 17 May 2017 в 12:23
поделиться

4 ответа

Вы можете использовать оператор CASE

SELECT Total = CASE WHEN number_of_items > 0 
               THEN total/number_of_items
               ELSE total END
FROM   xxx
14
ответ дан 28 November 2019 в 04:02
поделиться

Похоже, вы используете Oracle, поэтому вы можете использовать для этого функцию great вместо max

select total/greatest(1,number_of_items) 
from xxx;
74
ответ дан 28 November 2019 в 04:02
поделиться
SELECT total/(CASE WHEN number_of_items>1 THEN number_of_items ELSE 1 END) FROM xxx

должно работать здесь .......

3
ответ дан 28 November 2019 в 04:02
поделиться

Обычно это должно быть:

SELECT MAX(columnName)
FROM   Table1

Or

SELECT MAX(columnName)
FROM   (SELECT * FROM TableX) AS T1

Or (и это, вероятно, то, что вы хотите в вашем случае)

SELECT MAX(value)
FROM   (SELECT 1 AS VALUE FROM DUAL UNION SELECT 2 AS VALUE FROM DUAL)

Однако может быть более чистый способ сделать это.

UPDATE: Используя ваш пример с количеством_элементов и итогом из таблицы XXX, это будет:

SELECT TOTAL/MAX(NUMBER_OF_ITEMS)
FROM   XXX

UPDATE 2: Имейте в виду, если вы позволите количеству элементов быть 0, вы получите исключение деления на 0. Вот почему в другом ответе пользователь поставил case, а else было TOTAL, таким образом вы не получите это исключение.

1
ответ дан 28 November 2019 в 04:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: