Sql order by group by

Моя таблица выглядит так (и я использую MySQL):

Моя цель — взять каждый m_id один раз и упорядочить по наивысшей отметке времени.

Результат должен быть:

И я написал этот запрос:

Я думаю, что это связано с тем, что он сначала выполняет GROUP_BY, а затем ЗАКАЗЫВАЕТ результаты.

Любые идеи? Спасибо.

Один из способов сделать это, который правильно использует group by :

Как это работает:

  • выбирает последнюю временную метку для каждого отдельного m_id в подзапросе
  • выбирает только строки из table , которые соответствуют строке из подзапроса (эта операция — там, где выполняется соединение, но ни одна колонка не выбрана из второй таблицы, она просто используется как фильтр) "semijoin" в случае, если вам было любопытно)
  • заказывает строки

Если вы действительно не заботитесь о том, какая временная метка вы получите, а ваш v_id всегда будет одинаковым для данного m_i , вы можете сделать следующее:

Теперь, если v_id изменяется для данного m_id , тогда вы должны сделать следующее

когда вы используете что вообще? Примеры приветствуются!

Я имею в виду так MySql, но не могу представить, что концепция отличается от другой СУБД

11 ответов

ORDER BY изменяет порядок, в котором возвращаются элементы.

GROUP BY будет агрегировать записи по указанным столбцам, что позволяет выполнять агрегационные функции для некрупных столбцов (таких как SUM, COUNT, AVG и т. д.).

ORDER BY изменяет порядок, в котором возвращаются элементы.

GROUP BY будет агрегировать записи по указанным столбцам, что позволяет выполнять агрегационные функции для некрупных столбцов (таких как SUM, COUNT, AVG и т. д.).

ЗАКАЗ: сортировка данных в порядке возрастания или убывания.

рассмотрим клиенты стол:

ниже приведен пример, который будет сортировать результаты в порядке возрастания по имени:

Читайте также:  Kaspersky endpoint security 10 как удалить пароль

это приведет к следующему результату:

ГРУППЫ: упорядочить идентичные данные в группы.

теперь клиенты таблица следующие записи с повторяющимися именами:

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

это приведет к следующему результату: (для идентичных имен он выберет последний и, наконец, отсортирует столбец в порядке возрастания)

как вы заключили,что он бесполезен без SQL-функций, таких как sum, avg и т. д..

так пройти через это определение поймите правильное использование GROUP BY:

предложение GROUP BY работает над строками, возвращаемыми запросом путем суммирования идентичные строки в одну / отдельную группу и возвращает одну строку с резюме для каждой группы, используя соответствующий агрегат функция в списке выбора, например COUNT (), SUM (), MIN (), MAX (), AVG(), так далее.

теперь, если вы хотите знать общую сумму зарплаты на каждого клиента( имя), то группа по запросу будет как следует:

это приведет к следующему результату: (сумма зарплат идентичных имен и сортировка столбца имени после удаления идентичных имен)

разница именно в том, что подразумевает имя: группа по выполняет операцию группировки и порядок по сортировкам.

Если у вас SELECT * FROM Customers ORDER BY Name затем вы получаете список результатов, отсортированный по имени клиентов.

Если у вас SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive вы получаете количество активных и неактивных клиентов. Группа по агрегирует результаты на основе указанного поля.

Они имеют совершенно другое значение и на самом деле не связаны вообще.

ПРИКАЗОМ позволяет сортировать результирующий набор по различным критериям, таким как первая сортировка по имени из a-z, а затем сортировка по цене от самой высокой до самой низкой.

Читайте также:  9 Шариков 2 взвешивания

(заказ по названию, цена DESC)

ГРУППА ПО позволяет взять результирующий набор, сгруппировать его в логические группы, а затем выполнить агрегированные запросы к этим группам. Вы можете, например, выбрать все сотрудники, сгруппировать их по месту их работы и рассчитать среднюю зарплату всех сотрудников каждого места работы.

простой ORDER BY заказывает данные и GROUP BY группы, или объединяет данные.

ORDER BY упорядочивает результирующий набор в соответствии с указанным полем по умолчанию в порядке возрастания.

Предположим, вы запускаете запрос как ORDER BY (student_roll_number) , он покажет вам результат в порядке возрастания числа студентов ролл. Вот, student_roll_number запись может произойти более одного раза.

на GROUP BY case, мы используем это с агрегатными функциями, и он группирует данные согласно агрегату функции, и мы получаем результат. Здесь, Если наш запрос имеет SUM (marks) вместе с GROUP BY (student_first_name) он покажет сумму баллов студентов, принадлежащих к каждой группе (где все члены группы будут иметь одинаковое имя).

GROUP BY используется для группировки строк в select, обычно при агрегировании строк(например, вычислении итогов, средних и т. д. для набора строк с одинаковыми значениями некоторых полей).

ORDER BY используется для упорядочения строк, полученных из инструкции select.

некоторые хорошие примеры там. Так же, как добавить свой собственный из webcheatsheet, который дает хорошие четкие примеры, а также позволяет выполнять собственный SQL.

ORDER BY показывает поля в порядке возрастания или убывания. В то время как GROUP BY показывает те же имена полей, идентификаторы и т. д. Только в одном выходе.

  1. GROUP BY будет агрегировать записи по указанному столбцу, что позволяет выполнять агрегационные функции для негруппированных столбцов (например, SUM, COUNT, AVG и т. д.). ORDER BY изменяет порядок, в котором возвращаются элементы.
  2. Если у вас Выберите IsActive, COUNT (*) из группы клиентов по IsActive вы получаете количество активных и неактивных клиентов. Группа по агрегирует результаты на основе указанного поля. Если у вас Выберите * из заказа клиентов по имени затем вы получаете список результатов, отсортированных по имени клиента.
  3. Если вы группируете, результаты не обязательно сортируются; хотя во многих случаях они могут выходить в интуитивном порядке, это не гарантируется предложением GROUP. Если вы хотите, чтобы ваши группы были отсортированы, всегда используйте явный порядок после GROUP BY.
  4. сгруппированные данные не могут быть отфильтрованы по предложению WHERE. Данные заказа могут быть отфильтрованы по предложению WHERE.
Читайте также:  Windows 7 sp1 x86 x64 2016

стоит отметить GROUP BY не всегда необходимо, так как (по крайней мере, в PostgreSQL и, вероятно, в других вариантах SQL) вы можете использовать ORDER BY список и можно использовать ASC или DESC per.

I have a table of tags and want to get the highest count tags from the list.

Sample data looks like this

gets me back the data I’m looking for perfectly. However, I would like to organize it, so that the highest tag counts are first, and limit it to only send me the first 20 or so.

and I keep getting an "Invalid use of group function — ErrNr 1111"

Rate this post

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *