Это должно быть просто и показывает мое незнание 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. Я хочу видеть итоговое значение и в этом случае.
Вы можете использовать оператор CASE
SELECT Total = CASE WHEN number_of_items > 0
THEN total/number_of_items
ELSE total END
FROM xxx
Похоже, вы используете Oracle, поэтому вы можете использовать для этого функцию great
вместо max
select total/greatest(1,number_of_items)
from xxx;
SELECT total/(CASE WHEN number_of_items>1 THEN number_of_items ELSE 1 END) FROM xxx
должно работать здесь .......
Обычно это должно быть:
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, таким образом вы не получите это исключение.