SQLite中的SELECT*,COUNT(*)

gri*_*yvp 23 sql sqlite

如果我在SQLite中执行标准查询:

SELECT * FROM my_table
Run Code Online (Sandbox Code Playgroud)

我按预期在表格中获得了所有记录.如果我执行以下查询:

SELECT *, 1 FROM my_table
Run Code Online (Sandbox Code Playgroud)

我按预期获得所有记录,最右边的列在所有记录中保持"1".但是,如果我执行查询:

SELECT *, COUNT(*) FROM my_table
Run Code Online (Sandbox Code Playgroud)

我只获得一行(最右边的列是正确的计数).为什么有这样的结果?我在SQL方面不是很好,可能会有这种行为吗?这对我来说似乎很奇怪和不合逻辑:(.

nos*_*nos 28

SELECT *, COUNT(*) FROM my_table 不是你想要的,它不是真正有效的SQL,你必须按所有不是聚合的列进行分组.

你想要的东西

SELECT somecolumn,someothercolumn, COUNT(*) 
   FROM my_table 
GROUP BY somecolumn,someothercolumn
Run Code Online (Sandbox Code Playgroud)

  • 有关聚合函数的SQLite帮助(sqlite.org/lang_aggfunc.html)没有关于'group by'的任何内容:(.是否有一些文档我可以阅读有关此限制的内容以便更好地理解? (2认同)
  • @Eye of Hell任何有关SQL的书都可以,但这并不是特定于sqlite的. (2认同)
  • 这个答案把我带到了关于结果集的 SQLite 文档的这个页面,包括 GROUP BY:https://www.sqlite.org/lang_select.html#resultset (2认同)

raf*_*sti 15

如果要计算表中的记录数,只需运行:

    SELECT COUNT(*) FROM your_table;
Run Code Online (Sandbox Code Playgroud)


Bur*_*cin 9

count(*)是一个聚合函数.需要对聚合函数进行分组以获得有意义的结果.您可以阅读:计数列分组


Bob*_*ica 5

如果您想要的是附加到每一行的表中的记录总数,您可以执行类似的操作

SELECT *
  FROM my_table
  CROSS JOIN (SELECT COUNT(*) AS COUNT_OF_RECS_IN_MY_TABLE
                FROM MY_TABLE)
Run Code Online (Sandbox Code Playgroud)

分享和享受.