Сначала оставьте числа, встречающиеся ровно один раз, затем возьмите MAX. Внешняя агрегация вернёт NULL, если подходящих чисел нет.
SQL: максимальное число с единственным вхождением
Сначала оставьте числа, встречающиеся ровно один раз, затем возьмите MAX. Внешняя агрегация вернёт NULL, если подходящих чисел нет.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Условие
Надо: Найдите максимальное одинокое число. Если таких чисел нет, выведите null (пустоту)
Пример 1: Input: MyNumbers table: +-----+ | num | +-----+ | 8 | | 8 | | 3 | | 3 | | 1 | | 4 | | 5 | | 6 | +-----+
Output: +-----+ | num | +-----+ | 6 | +-----+
Пример 2: Input: MyNumbers table: +-----+ | num | +-----+ | 8 | | 8 | | 7 | | 7 | | 3 |
Ответ
Сначала оставьте числа, встречающиеся ровно один раз, затем возьмите MAX. Внешняя агрегация вернёт NULL, если подходящих чисел нет.
SELECT MAX(num) AS num
FROM (
SELECT num
FROM MyNumbers
WHERE num IS NOT NULL
GROUP BY num
HAVING COUNT(*) = 1
) AS singles;
В первом примере остаются 1, 4, 5 и 6, поэтому ответ — 6. Второй пример в условии обрезан: если перечисленные строки исчерпывают таблицу, результат будет 3. NULL получается только при отсутствии чисел с единственным вхождением.