代码之家  ›  专栏  ›  技术社区  ›  Ken Sinelli

为什么这个简单的SQL查询不能正常工作?从表中选择*,count(*)

  •  1
  • Ken Sinelli  · 技术社区  · 4 年前

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

    它们各自独立工作,但如果结合在一起就不行了。我尝试在尝试的末尾添加一个groupby语句,但是不管我按哪个列分组,仍然会出现错误。我最初的尝试到底是什么错?

    1 回复  |  直到 4 年前
        1
  •  2
  •   fpietka AdrianBR    4 年前

    是因为 COUNT 是一个聚合函数,一旦使用了一个聚合,则必须选择如何将 SELECT 声明。

        2
  •  1
  •   Gordon Linoff    4 年前

    此查询:

    select *, count(*)
    from bricks
    

    格式不正确。因为 count() 这是一个 聚合 查询。没有的聚合查询 group by 返回一行。但是,您还试图选择其他列——任何合理的数据库都将遵循SQL标准并返回错误。

    你能做什么?SQL有一种叫做窗口函数的东西。这使您可以很容易地执行您想要的操作:

    select *, count(*) over () as num_bricks
    from bricks