Группировка по не обеспечивает точную группировку - PullRequest
0 голосов
/ 07 апреля 2019

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

enter image description here

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

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;

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

enter image description here

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

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;

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

enter image description here

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

1 Ответ

4 голосов
/ 07 апреля 2019

Вы не используете 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) это могло бы вызвать синтаксическую ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...