Бран · продюсер «Хроник Пограничья»
Инвестор спросил, сколько у нас платящих игроков. Маркетинг говорит «1250». Мне кажется, это много для нашей игры. Проверь?
Подозрение Брана верное, и дело не в маркетинге, а в одном слове. «Сколько платящих» и «сколько платежей» звучат похоже, а считаются по-разному. Сегодня учимся убирать повторы и считать уникальное.
Гостевая книга на входе
Представь гостевую книгу в таверне. Каждый вошедший расписывается, и завсегдатай за месяц оставит тридцать подписей. Сколько строк в книге? Сотни. Сколько разных гостей? Надо пройти по книге и вычеркнуть повторные имена.
В таблицах та же история. В characters 5602 строки, у каждой свой класс, и классы повторяются:
SELECT class
FROM characters
LIMIT 6;
class
---------
warrior
rogue
priest
ranger
ranger
rogue
DISTINCT: вычеркнуть повторы
Слово DISTINCT сразу после SELECT делает то же, что и человек с гостевой книгой: из одинаковых строк оставляет одну.
SELECT DISTINCT class
FROM characters
ORDER BY class;
class
---------
mage
priest
ranger
rogue
warrior
Пять классов на 5602 персонажа. ORDER BY здесь только выстраивает список по алфавиту: сам DISTINCT порядок не обещает.
Уникальна вся строка, а не столбец
Если после DISTINCT несколько столбцов, повтором считается строка, у которой совпали все столбцы сразу. Пара «маг, эльф» и пара «маг, орк» разные, обе останутся.
SELECT DISTINCT class, race
FROM characters
WHERE level = 60
ORDER BY class, race;
class | race
---------+-------
mage | dwarf
mage | elf
mage | human
mage | orc
priest | elf
priest | orc
ranger | dwarf
ranger | elf
ranger | human
ranger | orc
rogue | elf
rogue | human
rogue | orc
warrior | dwarf
warrior | elf
warrior | human
warrior | orc
Во всей игре встречаются все 20 сочетаний пяти классов и четырёх рас. А на 60-м уровне только 17: жреца-гнома, жреца-человека и разбойника-гнома до потолка пока никто не докачал. Такая находка уже интересна геймдизайнеру.
Частая ошибка: написать SELECT DISTINCT class, race и ждать список уникальных классов. DISTINCT не умеет действовать на один столбец из нескольких, он всегда про строку целиком.
урок из курса
Урок из курса «Аналитика данных с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.