【问题标题】:could not prepare statement (1 misuse of aggregate function COUNT()) - part 2无法准备语句(1 次滥用聚合函数 COUNT()) - 第 2 部分
【发布时间】:2021-09-30 20:46:38
【问题描述】:

我正在尝试运行以下查询:

select U1.userEmail, U1.firstname + ' ' + U1.surName as fullname 
from tblUser as U1 inner join tblDriver as D on U1.userEmail= D.userEmail
inner join tblGetAsk as GA  on GA.userEmail = D.userEmail
where not exists (select 1 from tblRideRating as R where R.userEmail = U1.userEmail)
and count(GA.userEmail) >= 3

但我收到以下错误:

错误 1:无法准备语句(1 滥用聚合函数 计数())

我真正想做的是:只选择同时也是司机并且在tblRideRating中有0条记录,并且在tblGetAsk中至少有3条记录的用户。

【问题讨论】:

  • 您使用的连接运算符+ 在SQL Server 中有效,但错误消息似乎是SQLite。您使用哪个数据库?

标签: sql join group-by


【解决方案1】:

您可以使用聚合。
按用户分组并使用HAVING 子句:

select U1.userEmail, U1.firstname + ' ' + U1.surName as fullname 
from tblUser as U1 
inner join tblDriver as D on D.userEmail= U1.userEmail
inner join tblGetAsk as GA on GA.userEmail = U1.userEmail
where not exists (select 1 from tblRideRating as R where R.userEmail = U1.userEmail)
group by U1.userEmail, U1.firstname + ' ' + U1.surName
having count(GA.userEmail) >= 3

如果您在tblGetAsk 中的每个用户都有重复的电子邮件,也许您应该更改为:

having count(distinct GA.userEmail) >= 3

你也可以在tblGetAsk聚合然后加入:

select U1.userEmail, U1.firstname + ' ' + U1.surName as fullname 
from tblUser as U1 
inner join tblDriver as D on D.userEmail= U1.userEmail
inner join (
  select userEmail
  from tblGetAsk
  group by userEmail
  having count(*) >= 3 
) as GA on GA.userEmail = U1.userEmail
where not exists (select 1 from tblRideRating as R where R.userEmail = U1.userEmail)

【讨论】:

  • 但是我真的不需要在这里分组任何东西。没有别的办法了吗?
  • @Alon 您只能通过聚合获得电子邮件数量。我将聚合放在主查询中。我可以把它放在表 tblGetAsk 中。请参阅我编辑的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 2021-02-01
  • 2016-10-15
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多