Я хочу найти все курсы, которые предлагались не более одного раза в 2009 году
Вы можете сделать это, протестировав COUNT
вручную. Я не знаком с Oracle и PL / SQL («SQL Plus» - это программа, а не язык), поэтому я не могу сказать, как UNIQUE()
должен работать, но вот как я это сделаю (используя стандартные SQL, который работает во всех SQL-92-совместимых базах данных):
SELECT
courses.*
FROM
courses
INNER JOIN
(
SELECT
course_id
FROM
section
WHERE
year = 2009
GROUP BY
course_id
HAVING
COUNT(*) = 1
) AS courses_1_in_2009 ON courses_1_in_2009.course_id = courses.course_id
Это работает с использованием внутреннего подзапроса `` в качестве фильтра для выбора только курсов, которые появились только один раз в 2009 году. Если вы запустите его по отдельности, вы увидите результаты, которые он получает:
SELECT
course_id,
COUNT(*) AS count_2009
FROM
section
WHERE
year = 2009
GROUP BY
course_id
Затем мы можем добавить оператор HAVING
и удалить ненужный столбец count_2009
, чтобы получить course_id
интересующих нас курсов:
SELECT
course_id
FROM
section
WHERE
year = 2009
GROUP BY
course_id
HAVING
COUNT(*) = 1
Затем выполните INNER JOIN
с courses
, чтобы получить их действительные имена и другие значения, чтобы получить запрос, который я разместил вверху.