Группировать по не обеспечивает точной группировки

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

Группировать по не обеспечивает точной группировки

Когда я пытаюсь выполнить следующий запрос:

SELECT t.amount, d.DOMAIN_NAME,td.month_number
FROM transaction t 
JOIN transaction_date td ON t.trans_date_key = td.trans_date_key
JOIN domain d ON t.domain_key = d.domain_key
WHERE td.month_number =7
ORDER BY amount DESC;

Я получаю вывод:

Группировать по не обеспечивает точной группировки

Когда я реализую этот запрос:

SELECT t.amount, d.DOMAIN_NAME,td.month_number
FROM transaction t 
JOIN transaction_date td ON t.trans_date_key = td.trans_date_key
JOIN domain d ON t.domain_key = d.domain_key
WHERE td.month_number =7
GROUP BY domain_name
ORDER BY amount DESC;

Я получаю вывод:

Группировать по не обеспечивает точной группировки

Почему моя группировка работает правильно только для нескольких доменных имен, но не для других?

попробуйте: выберите SUM(t.amount), ....

Bernd Buffen 07.04.2019 21:42

Я пробовал этот вариант. Не производит целевой вывод. Он суммирует весь месяц транзакций.

Slyme 07.04.2019 21:42
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Рассмотреть возможность:

SELECT SUM(t.amount) total_amount, d.domain_name, td.month_number
FROM transaction t 
INNER JOIN transaction_date td ON t.trans_date_key = td.trans_date_key
INNER JOIN domain d ON t.domain_key = d.domain_key
WHERE td.month_number = 7
GROUP BY d.domain_name, td.month_number
ORDER BY total_amount DESC;

Что происходит с тем, как вы использовали GROUP BY, так это то, что MySQL фактически выбирает случайную запись из тех, которые имеют одинаковые domain_name. В большинстве других СУБД (и в нестарых версиях MySQL) это вызвало бы синтаксическую ошибку.

Другие вопросы по теме