滥用聚合:在 SQLITE 中获取视图的最大值时使用 max()

misuse of aggregate: max() when getting the max of a view in SQLITE

我创建了一个 VIEW (VISIT_VIEW),它有两列,citizens 和 count(visitsDoctors) AS ToTal_Visits:

CREATE VIEW VISIT_VIEW AS
SELECT citizen, COUNT(doctor) AS Total_Visits
FROM citizensvisits
GROUP BY citizen, doctor;

那returns每个公民去看医生的次数的列表

citizen1 1
citizen1 2
citizen1 5
...
citizen3 10
citizen3 4 

然后我需要创建一个新视图来保存 TotalVisits 的 MAX 和每个公民

CREATE VIEW MAXVISITS AS
SELECT citizens,  Total_Visits AS MaxTotal_Visits
FROM VISIT_VIEW
WHERE MaxTotal_Visits  =  max("Total_Visits")
GROUP BY citizens, MaxTotal_Visits;

所以当尝试

SELECT *
FROM MAXVISIT_VIEW

我明白了

Result: misuse of aggregate: max()

我做错了什么?

编辑:我已经放置了 VISIT_VEW 代码并澄清一下,我需要一个新视图来列出每个公民的最大访问次数,即

citizen1 5
citizen3 10

我可能完全错了,但我相信你需要做一个子 select

类似这样,但不完全是

CREATE VIEW MAXVISITS AS
SELECT citizens,  Total_Visits AS MaxTotal_Visits
FROM VISIT_VIEW
WHERE MaxTotal_Visits = (SELECT MAX(Total_Visits) FROM VISIT_VIEW)
GROUP BY citizens, MaxTotal_Visits;

可能有也可能没有其他问题。包括我的解决方案。

您不能直接使用 MAX() 聚合函数。
您必须重新聚合:

CREATE VIEW MAXVISITS AS
SELECT citizen, MAX(Total_Visits) AS MaxTotal_Visits
FROM VISIT_VIEW
GROUP BY citizen

或不使用 VISIT_VIEW,直接从 table 中选择 MAX() window 函数:

CREATE VIEW MAXVISITS AS
SELECT DISTINCT citizen, 
       MAX(COUNT(*)) OVER (PARTITION BY citizen) AS Total_Visits 
FROM citizensvisits 
GROUP BY citizen, doctor;