Sql 如何避免聚合函数错误?
我使用以下sql计算总百分比:Sql 如何避免聚合函数错误?,sql,ms-access,Sql,Ms Access,我使用以下sql计算总百分比: SELECT tblTourns_atp.ID_Ti, Sum([FS_1]/(SELECT Sum(FSOF_1) FROM stat_atp WHERE stat_atp.ID_T = tblTourns_atp.ID_T)) AS S1_IP FROM stat_atp INNER JOIN tblTourns_atp ON stat_atp.ID_T = tblTou
SELECT tblTourns_atp.ID_Ti,
Sum([FS_1]/(SELECT Sum(FSOF_1)
FROM stat_atp
WHERE stat_atp.ID_T = tblTourns_atp.ID_T)) AS S1_IP
FROM stat_atp
INNER JOIN tblTourns_atp ON stat_atp.ID_T = tblTourns_atp.ID_T
GROUP BY tblTourns_atp.ID_Ti
我得到“聚合错误”,因为它希望ID\T字段分组或在聚合函数中。我读过大量的例子,但当违规字段是“WHERE”主题时,它们似乎都不适用
表和输出如下:
+----------+------+--------+--+---------------+-------+--+--------+--------+
| stat_atp | | | | tblTourns_atp | | | Output | |
+----------+------+--------+--+---------------+-------+--+--------+--------+
| ID_T | FS_1 | FSOF_1 | | ID_T | ID_Ti | | ID_Ti | S1_IP |
| 1 | 20 | 40 | | 1 | 1 | | 1 | 31.03% |
| 2 | 30 | 100 | | 2 | 1 | | 2 | 28.57% |
| 3 | 40 | 150 | | 3 | 1 | | 3 | 33.33% |
| 4 | 30 | 100 | | 4 | 2 | | | |
| 5 | 30 | 100 | | 5 | 2 | | | |
| 6 | 40 | 150 | | 6 | 2 | | | |
| 7 | 20 | 40 | | 7 | 3 | | | |
| 8 | 30 | 100 | | 8 | 3 | | | |
| 9 | 40 | 150 | | 9 | 3 | | | |
| 10 | 20 | 40 | | 10 | 3 | | | |
+----------+------+--------+--+---------------+-------+--+--------+--------+
由于两个表之间已经存在内部联接,因此不需要单独的子查询:
select t.id_ti, sum(s.fs_1)/sum(s.fsof_1) as pct
from tbltourns_atp t inner join stat_atp s on t.id_t = s.id_t
group by t.id_ti
我猜SUM中的SUM是抛出错误。这仍然是一个猜测。请发布数据和预期结果。如果我将tblTourns\u atp.ID\u T添加到组中,效果会很好。这有用吗?数据和输出将花费我10-15分钟的时间来整理,我想会有一个简单的答案?因为您在co relatedsub查询中的select子句中使用tblTourns\u atp.ID\T,所以您必须在group by子句中使用它。如果你能发布样本数据和预期结果,我们可以帮助你。用一些虚拟数据更新。非常感谢你。您能解释一下使用字母s和t的逻辑吗?非常欢迎您-字母t&s只是表名别名,以节省一些输入,同时确保每个字段都使用表限定符。太好了,谢谢!我能不能厚颜无耻地问一下;如果表t中有一个日期字段,您将如何在其中添加一个WHERE,它只对t.id_t的值求和,其中t.id_t的日期小于或等于当前记录的日期?很高兴帮助您回答这个问题,但如果将其作为一个单独的问题和相关的样本数据和预期结果一起提出,则会更清楚-很难单独解释一个描述。好的,谢谢。在此处添加: