Sql 滥用聚合:COUNT()

Sql 滥用聚合:COUNT(),sql,database,rstudio,Sql,Database,Rstudio,我有两张桌子,罗兹莫瓦和阿本特。我正在尝试这样做: dbGetQuery(con, "SELECT A.imie, A.nazwisko, A.numer, COUNT(R.id_abonent_to) AS ile FROM abonent A LEFT JOIN rozmowa R ON A.id = R.id_abonent_to WHERE ile > 4 GROUP BY A.id, A.imie, A.nazwisko, A.numer") 但我犯了个错误 滥用聚合:

我有两张桌子,罗兹莫瓦和阿本特。我正在尝试这样做:

dbGetQuery(con, "SELECT A.imie, A.nazwisko, A.numer, 
COUNT(R.id_abonent_to) AS ile 
FROM abonent A LEFT JOIN 
rozmowa R ON A.id = R.id_abonent_to 
WHERE ile > 4
GROUP BY A.id, A.imie, A.nazwisko, A.numer")
但我犯了个错误

滥用聚合:COUNT()


有人能给我解释一下原因吗?

也许你把
在哪里
拥有
搞混了:

SELECT A.imie, A.nazwisko, A.numer, COUNT(*) AS ile
FROM abonent A JOIN
     rozmowa R
     ON A.id = R.id_abonent_to
GROUP BY A.id, A.imie, A.nazwisko, A.numer
HAVING COUNT(*) > 4;
并非所有数据库都支持
中的列别名。如果您有,您可以使用
HAVING ile>4

请注意,
左连接是不必要的,因为您需要至少5行匹配。(我想对您的查询可能有其他解释,但我猜正在计数的多行来自
R


然后对计数(*)
进行简化。用于
COUNT()
的列是
上的
的一部分。您的
COUNT()
版本适用于
左联接
,但对您所做的工作不必要。

也许您将
何处
具有
相混淆:

SELECT A.imie, A.nazwisko, A.numer, COUNT(*) AS ile
FROM abonent A JOIN
     rozmowa R
     ON A.id = R.id_abonent_to
GROUP BY A.id, A.imie, A.nazwisko, A.numer
HAVING COUNT(*) > 4;
并非所有数据库都支持
中的列别名。如果您有,您可以使用
HAVING ile>4

请注意,
左连接是不必要的,因为您需要至少5行匹配。(我想对您的查询可能有其他解释,但我猜正在计数的多行来自
R


然后对计数(*)
进行简化。用于
COUNT()
的列是
上的
的一部分。您的
COUNT()
版本适用于
左加入
,但对您所做的工作不必要。

嘿,谢谢您的帮助!这管用!但是你能告诉我为什么我要用这里和哪里?为什么会有计数(*)?这不是意味着“数一数”吗?(我是这里的新手)嘿,谢谢你的帮助!这管用!但是你能告诉我为什么我要用这里和哪里?为什么会有计数(*)?这不是意味着“数一数”吗?(我是这里的新手)我猜这是因为R.id_abonent_to来自左联接表,所以它的值不一定是“真的”。我猜这是因为R.id_abonent_to来自左联接表,所以它的值不一定是“真的”。