为什么这个简单的SQL查询不起作用?从表中选择*,count*

问题描述

我正在尝试学习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