«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как вычислить сумму значений в SQL, гарантируя, что каждая строка учитывается только один раз?

Как вычислить сумму значений в SQL, гарантируя, что каждая строка учитывается только один раз?

Опубликовано 16 ноября 2024 г.
Просматривать:126

How To Calculate the Sum of a Value in SQL While Ensuring Each Row is Counted Only Once?

Группировка строк в SQL с использованием SUM() для различных значений

В вашем запросе MySQL вы хотите вычислить сумму значений в таблицу преобразований, гарантируя при этом, что каждая строка учитывается только один раз. Для этого вы используете ключевое слово DISTINCT в сочетании с функцией SUM(). Однако вы столкнулись с проблемой, из-за которой повторяющиеся строки приводят к завышению результата SUM().

Чтобы решить эту проблему, рассмотрите отношения первичного ключа в ваших таблицах. Если конверсии.id — это первичный ключ таблицы конверсий, а stats.id — первичный ключ таблицы статистики, то каждый конверсии.id уникален для одного link.id.

Исходя из этого понимания, вы можете реструктурировать свой запрос, чтобы вычислить сумму конверсий.значение для каждого отдельного конверсий.id, а затем разделить результат на общее количество строк в каждой группе link.id. Это предоставит вам желаемую сумму различных значений.

Вот измененный запрос:

SELECT links.id,
       count(DISTINCT stats.id) as clicks,
       count(DISTINCT conversions.id) as conversions,
       sum(conversions.value)*count(DISTINCT conversions.id)/count(*) as conversion_value
FROM links
LEFT OUTER JOIN stats ON links.id = stats.parent_id
LEFT OUTER JOIN conversions ON links.id = conversions.link_id
GROUP BY links.id
ORDER BY links.created desc;

Этот запрос должен эффективно вычислять сумму конверсий.значение для каждого отдельного конверсий.id в каждой группе link.id, гарантируя, что каждая строка учитывается только один раз.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3