我有这两个SQL表:
create table Kids (
id Int Identity (1,1) primary key not null
, firstName varchar(100)
, lastName varchar(100)
, birthDate datetime
)
create table Toys (
id Int Identity (1,1) primary key not null
, kidId Int
, toyName varchar(100)
, colour varchar(100)
)
ALTER TABLE Toys
ADD FOREIGN KEY (kidId) REFERENCES Kids(id);
我正在尝试获得:所有拥有1个以上玩具的5岁以下儿童
我有这样的疑问:
select CONCAT(Kids.firstName,' ',Kids.lastName) as FullName,
birthDate,
count(Toys.Id) as 'Number of Toys'
from Kids
inner join Toys on Kids.id = Toys.kidId
where datediff(year, birthDate, getdate()) <= 5
and count(Toys.Id) > 1
但我得到的错误:
聚合不能出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部引用。
包含预期结果的列表。
2条答案
按热度按时间h7appiyu1#
h7appiyu2#
您的错误消息清楚地表明,您不能将聚合函数仅放在having中的where子句中。
您仍然需要
GROUP BY
,以便每个孩子都显示正确的计数,否则您只能返回q行| 全名|出生日期|玩具数量|
| - ------|- ------|- ------|
fiddle