Надеюсь, вы сможете помочь мне с этим оператором MYSQL. У меня такая таблица:

    |id            |duration     |start               |
    |1110460       |8.2          |20171211            |
    |2221104       |8.9          |20171112            |
    |1110460       |3.2          |20171113            |
    |1110460       |4.4          |20171214            |
    |3331938       |3.2          |20180115            |
    |3331722       |5.4          |20171216            |
    |1948212       |9.2          |20171217            |
    |9219302       |3.2          |20171218            |

Я хочу перечислить 4 основных идентификатора по общей продолжительности для данного начального месяца в порядке убывания.

Например, для 4 лучших идентификаторов за 201712 год:

    |id            |duration     |
    |1110460       |12.6         |
    |1948212       |9.2          |
    |3331722       |5.4          | 
    |9219302       |3.2          |

Любая помощь будет оценена. Это то, что у меня есть до сих пор, но он возвращал неправильные результаты:

    SELECT id, sum(duration) FROM table WHERE 
    start LIKE '201712%' ORDER BY sum(duration) DESC LIMIT 4
0
Petey 1 Янв 2018 в 21:49

2 ответа

Лучший ответ

Вы должны использовать группу по

SELECT id, sum(duration) 
FROM table 
WHERE start LIKE '201712%' 
GROUP BY id
ORDER BY sum(duration) DESC LIMIT 4
0
scaisEdge 1 Янв 2018 в 19:05

Чтобы получить 4 различных максимальных суммы и их идентификаторы, вы можете использовать следующие

SELECT a.id, a.sum_duration 
FROM (SELECT id, sum(duration) sum_duration
      FROM demo 
      WHERE `start` LIKE '201712%' 
      GROUP BY id
) a
JOIN (SELECT distinct sum(duration) max_durations
      FROM demo 
      WHERE `start` LIKE '201712%' 
      GROUP BY id
      ORDER BY sum(duration) DESC 
      LIMIT 4 
) b on a.sum_duration = b.max_durations

Вышеупомянутая версия вернет более 4 строк из 2 идентификаторов с одинаковым результатом суммы

ДЕМО

0
M Khalid Junaid 1 Янв 2018 в 19:06