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
的记录中随机选择一条记录。在大多数其他RDBMS(以及非古代版本的MySQL)上,这将生成语法错误。关于mysql - 分组依据无法提供准确的分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55562919/