Запрос с несколькими ORDER BY

Тема в разделе "Базы данных", создана пользователем Q_BASIC, 28 ноя 2017.

Модераторы: latteo
  1. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    451
    Симпатии:
    1.159
    Приветствую,

    Есть такой запрос:
    Код:
    SELECT * FROM `accounts` GROUP BY `email` ORDER BY `id` DESC
    Им мы получаем все уникальные email. Но у одинаковых email может быть разный group. Надо, чтобы еще была сортировка по полю group.

    Поле group может быть от -1 до 4. Если у email есть запись с группой 4, то надо получить именно эту строку. Если с таким полем email есть записи с группами -1, 2, 3, то надо получить запись с группой 3. То есть надо наибольшую группу получить в результате
     
    dana77 нравится это.
  2. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    451
    Симпатии:
    1.159
    Код:
    SELECT `accounts`.*
    FROM `accounts`,
        (
            SELECT `email`, MAX(`group`) `max_group`
            FROM `accounts` GROUP BY `email`
        ) `table2`
    WHERE
        `accounts`.`email`=`table2`.`email` AND
        `accounts`.`group`=`table2`.`max_group`
    ORDER BY `id` DESC
    Чего-то по email не сгруппировал запрос
     
    dana77 нравится это.
  3. TryCatch

    TryCatch

    Регистр.:
    19 авг 2016
    Сообщения:
    185
    Симпатии:
    74
    На вскидку, так:
    Код:
    SELECT a1.* FROM accounts a1,
      (SELECT email, MAX(e_group) e_group FROM accounts GROUP BY email) a2
    WHERE a1.email=a2.email AND a1.e_group=a2.e_group
    ORDER BY id DESC
    <-------------- добавлено через 2544 сек. -------------->
    Что ты имеешь в виду? На выходе должен получиться список по одной строке для каждого email, соответствующей макс значению group.