分组依据无法提供准确的分组

时间:2019-04-07 19:36:08

标签: mysql sql pentaho pentaho-report-designer

尝试创建与以下屏幕截图匹配的输出:

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 个答案:

答案 0 :(得分:4)

您没有正确使用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)上,这会产生语法错误。