2016-01-28 5 views
-2

Это что-то вроде этого действительно:Может ли подзапрос использоваться внутри функции min() в oracle sql?

select min(select coloumn1 from table1) from dual; 

Я знаю, что выражение должно присутствовать внутри функции. Но can not запрос обрабатывается как выражение

+1

Вы пробовали? Каков ваш прецедент? – Undo

+0

yes it says error: missing expression –

+0

Я знаю, что выражение должно присутствовать внутри функции. Но can not запрос обрабатывается как выражение –

ответ

0

Да, вы можете иметь подзапрос внутри агрегатной или аналитической функции, если подзапрос является скалярным подзапросом, то есть он возвращает только одну строку и один столбец.

SELECT min((SELECT one_row FROM some_table)) 
    FROM DUAL; 

Обратите внимание на второй набор круглых скобок вокруг скалярного оцененного подзапроса. Они необходимы для того, чтобы механизм БД распознал подзапрос как выражение.

Это было бы гораздо интереснее вопрос, однако, если скалярный подзапрос коррелировали с внешним запросом, и если внешний запрос был более одной строки:

SELECT min((SELECT st.one_row 
       FROM some_table st 
      WHERE st.one_id = ot.outer_id)) min_value 
    FROM outer_table ot; 
0

Да и нет :-) Это ваш запрос:

select min(select coloumn1 from table1) from dual; 

Давайте посмотрим на этот доводчик:

select min(something) from dual; 

Это something может быть подзапросом, но он должен возвращать только одно значение, то есть один столбец и не более одной строки. Подзапросы записываются в круглых скобках, например. (select coloumn1 from table1). Вы получите

select min((select coloumn1 from table1)) from dual; 

Это синтаксически актуально. Но, ну, в таблице 1 должно быть не более одной записи (или вам нужно добавить предложение where, чтобы получить не более одной строки).

В любом случае вы выбираете из двойного, так что MIN(something) - это то же самое, что и something. Так что семантически это не имеет смысла. Но сама конструкция действительна, и вы, например, можете использовать:

select min((select col1 from t2 where t2.id = t1.id_t2)) from t1; 

Это что-то, но вы не часто увидите.

Смежные вопросы