问题描述
我正在尝试学习sql,并且正在跟着练习进行练习,但是我对为什么这个简单的sql语句行不通感到困惑。
select *,count(*) from bricks
教师要执行的操作是返回名为Bricks的表的所有行。我们还想在表的右侧添加一个新列,该列仅返回每个记录中所有砖块的总数。因此,表中总共有6块积木,因此每一行的末尾都应有一列,其读数为6。
讲师这样做的方式是:
select b.*,(select count(*) from bricks) total_bricks_in_table from bricks b;
第一个查询是我对它的尝试,并且在运行时看不到为什么它不起作用
select * from bricks
和
select count(*) from bricks
每个工作都是自己完成的,但不能结合在一起工作。我尝试在尝试结束时添加一个group by语句,但是无论我按哪一列分组,我仍然会出错。我最初的尝试到底出了什么问题?
解决方法
这是因为COUNT
是一个聚合函数,一旦使用了一个聚合,就必须选择如何聚合SELECT
语句的其他所有列。
此查询:
select *,count(*)
from bricks
格式错误。由于count()
,这是一个 aggregation 查询。没有group by
总是 的聚合查询返回一行。但是,您还尝试选择其他列-任何合理的数据库都将遵循SQL标准并返回错误。
你能做什么? SQL有一个称为窗口函数的东西。这使您要做的事情变得非常简单:
select *,count(*) over () as num_bricks
from bricks