SQL запрос. Как найти сумму повторяющихся строк?

Ссылка скопирована
1 ответ

Приветствую, прошу помощи.
Есть таблица table, в ней есть столбцы id и price.
В поле id есть много повторов.
Вывести все id и их суммы значений price, у которых сумма price больше 100 из таблицы table и отсортированную по убыванию.

То есть если есть id со значением 10 и в таблице он встречается 5 раз, то нужно посчитать сумму 5 значения поля price для id со значением 10 и эту сумму вывести новым столбцом summ_price, что бы потом оставить только строки где значения summ_price больше 100 и отсортировать по убыванию.

Надеюсь понятно объяснил.
Всё что пока получилось, это :

SELECT id, price, COUNT(*) FROM table GROUP BY id, price HAVING COUNT(*) > 1

SELECT id, price, COUNT(*) FROM table GROUP BY id, price HAVING COUNT(*) > 1

Привёл пример на картинке - нужно из левой получить правую(промежуточный вариант просто для понимания)

SQL запрос. Как найти сумму повторяющихся строк?

Дополнительно:

Вывести все id

GROUP BY

суммы значений price

SUM()

сумма price больше 100

HAVING

из таблицы table

FROM

отсортированную по убыванию

ORDER BY

  • Akina, не совсем понятно, как посчитать сумму всех значения price для каждого id
  • Элементарный запрос на суммирование с группировкой:

    SELECT id, SUM(price) sum_price FROM tbl GROUP BY id ORDER BY sum_price DESC;

    SELECT id, SUM(price) sum_price FROM tbl GROUP BY id ORDER BY sum_price DESC;

    SQL SUM GROUP BY

    • @rozhnev
      Благодарю за ответ! Начинает в голове всё проясняться:)
      Хотел бы уточнить, мне ещё нужно вывести только строки со значением summ_price более 100
      Использую

      HAVING COUNT(summ_price) > 100
      Но выпадает ошибка

    • PapiRUS90, https://sqlize.online/sql/mysql57/1bf9583f16cfaf9e...
    • Slava Rozhnev, спасибо Вам огромное.
      Позвольте последний вопрос. Я хочу объединить данные результаты с другой таблицей с помощью JOIN
      Написал следующий запрос:
      SELECT table2.name, table.id AS id2, table.price FROM table2 INNER JOIN table ON table2.id2 = table.id;

      SELECT table2.name, table.id AS id2, table.price FROM table2 INNER JOIN table ON table2.id2 = table.id;

      НО, мне нужно совместить результаты полученные на предыдущем этапе добавив поле name из таблицы table2 где table.id = table2.id2

    • То есть цель получить таблицу из столбцов id/name/summ_price
    • PapiRUS90, Опубликуйте свои таблицы и тестовые данные на https://sqlize.online
    • Slava Rozhnev, https://sqlize.online/sql/mysql57/7329259f1b787c31...
      Правда там ошибка, почему то не нравятся латинские слова. Не понимаю почему
      Ещё хотел для name указать varchar, но таблица не создавалась вообще. Переделал на text
    • PapiRUS90, Я смотрю Вы с SQL совсем не дружите:
      https://sqlize.online/sql/mysql57/6c04de9a729c0e20...
    • Slava Rozhnev,
      Второй день его изучаю:)
      Я Вам очень благодарен! Изучаю Ваши ответы, мне они очень помогли понять SQL-запросы.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Игорь Волков Ответ

    Для того чтобы найти сумму повторяющихся строк в SQL запросе, можно воспользоваться функцией GROUP BY и функцией SUM.

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

    SELECT column_name, SUM(column_name) AS sum_column
    FROM TABLE_NAME
    GROUP BY column_name
    HAVING COUNT(column_name) > 1;

    SELECT column_name, SUM(column_name) as sum_column FROM table_name GROUP BY column_name HAVING COUNT(column_name) > 1;

    В данном запросе мы выбираем столбец column_name из таблицы table_name, затем суммируем значения этого столбца для каждой уникальной строки с помощью функции SUM. Затем используем функцию GROUP BY для группировки строк с одинаковым значением column_name.

    HAVING COUNT(column_name) > 1 условие позволяет нам выбрать только повторяющиеся строки, так как COUNT(column_name) возвращает количество строк с одинаковым значением column_name, и мы выбираем только те строки, у которых количество больше одного.

    Таким образом, данный SQL запрос поможет вам найти и вывести сумму повторяющихся строк в таблице.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

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

    Вам также может быть интересно