Допустим, у нас стоит задача («фактуру» беру от фонаря, чисто чтоб под иллюстрацию решений канало): есть у нас, к примеру, таблица учеников (Students), в ней, помимо прочего, есть такие поля, как ФИО (Name), класс (ClassId) и показатель успеваемости (Performance). Нам надо (ну, скажем, для доски почёта) выбрать учеников с наилучшей успеваемостью по каждому классу. Запущено всё это на MS SQL Server. Так вот. Есть решение очевидное (для нахватавшегося SQL по верхам) и есть решение правильное (для умеющего в хитрозадые особенности). Очевидное решение (для тех, кто дальше джойнов не зашёл): скрестить таблицу учеников саму с собой, и выбрать по каждому классу тех, для кого нет никого с лучшей успеваемостью. В переводе с русского на SQL это запишется так: SELECT stud.Name FROM Students stud LEFT JOIN Students better ON stud.ClassId = better.ClassId AND stud.Performance < better.Performance WHERE better.Performance IS NULL Чем это решение хорошо? Тем, что джуну оно сразу придёт в голову, и
Выбор максимального значения по группам (SQL)
19 октября 202219 окт 2022
416
2 мин