select a.requester_id from RequestAccepted as a ,RequestAccepted as b where a.requester_id=b.accepter_id group by requester_id having max(count(b.accepter_id))这句话错在哪
时间: 2024-03-20 08:41:31 浏览: 15
这句SQL语句有一个问题,即在HAVING子句中使用MAX和COUNT聚合函数的组合是非法的。在HAVING子句中,只能使用聚合函数和分组列来过滤结果集。如果要使用MAX函数,请将其用于聚合列中,而不是在COUNT函数中。
正确的语法应该是:
```
SELECT a.requester_id
FROM RequestAccepted AS a, RequestAccepted AS b
WHERE a.requester_id = b.accepter_id
GROUP BY a.requester_id
HAVING COUNT(b.accepter_id) = (
SELECT MAX(request_count)
FROM (
SELECT COUNT(accepter_id) AS request_count
FROM RequestAccepted
GROUP BY requester_id
) AS requests
);
```
在这个查询中,最内层的子查询使用COUNT聚合函数和GROUP BY子句来计算每个请求者的请求计数。然后,它在外部查询中使用MAX函数来找到最大的请求计数。
然后,在最外层的查询中,我们使用HAVING子句来筛选出请求计数等于最大请求计数的请求者ID。注意,我们使用COUNT(b.accepter_id),而不是MAX(COUNT(b.accepter_id)),因为HAVING子句只允许使用聚合函数和分组列。