Я новичок в sql.
Я столкнулся с вопросом во время практики

Найдите разницу между общим количеством записей CITY в таблице и количеством отдельных записей CITY в таблице. Таблица STATION описывается следующим образом: структура таблицы

Я написал это как ответ:

select (select count(city) from station)-
(select distinct count(city) from station)
from station;

И эта ошибка отображается (ниже).

select (select count(city) from station) (select distinct count(city) from station)
*
ERROR at line 1:
ORA-00923: FROM keyword not found where expected

Почему такая ошибка?

0
Sayan Dasgupta 19 Май 2021 в 22:18

2 ответа

Лучший ответ

Вы получаете эту ошибку, потому что ваш клиент работает не совсем так, как вы планировали.

Из документации SQL * Plus (но это относится и к SQL Developer, но не к SQLcl):

Вы можете продолжить длинную команду SQL * Plus, введя дефис в конце строки и нажав Return. При желании вы можете ввести пробел перед вводом дефиса.

Итак, когда вы ввели свое заявление в виде трех строк:

select (select count(city) from station)-
(select distinct count(city) from station)
from station;

Клиент на самом деле видел их как два:

select (select count(city) from station) (select distinct count(city) from station)
from station;

Вы можете увидеть это в отчете об ошибке:

select (select count(city) from station) (select distinct count(city) from station)
*
ERROR at line 1:

Завершающий - рассматривался как символ продолжения, а не как оператор минус.

Чтобы избежать этого, вы можете сами поместить его в одну строку:

select (select count(city) from station)-(select distinct count(city) from station)
from station;

Или просто переместите минус в начало следующей строки:

select (select count(city) from station)
-(select distinct count(city) from station)
from station;

Не имеет прямого отношения, но поскольку ваш общий запрос from station, в вашем наборе результатов будет одна строка для каждой строки в этой таблице, все с одинаковой расчетной разницей. Если бы вам действительно нужно было вычесть результат двух подзапросов, вы могли бы сделать это вместо однострочной таблицы dual:

select (select count(city) from station)
-(select distinct count(city) from station)
from dual;

Но в этом случае, как уже показал @eshirvana, подзапросы вообще не нужны.

3
Alex Poole 20 Май 2021 в 08:11

Я думаю, вы пытаетесь это сделать:

select count(city) - count(distinct city)
from station;
2
eshirvana 19 Май 2021 в 19:20