Попытка создать выходные данные, соответствующие следующему снимку экрана:
Когда я пытаюсь выполнить следующий запрос:
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;
Я получаю вывод:
Почему моя группировка работает правильно только для нескольких доменных имен, но не для других?
Я пробовал этот вариант. Не производит целевой вывод. Он суммирует весь месяц транзакций.
Вы неправильно используете 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) это вызвало бы синтаксическую ошибку.
попробуйте: выберите SUM(t.amount), ....