Group by 不提供准确的分组
Group by does not provide accurate grouping
正在尝试创建与以下屏幕截图匹配的输出:
当我尝试以下查询时:
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 的非旧版本),这会产生语法错误。
正在尝试创建与以下屏幕截图匹配的输出:
当我尝试以下查询时:
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 的非旧版本),这会产生语法错误。