2011-04-15 62 views
0
select id, first_name, count(*) from users; 

users表包含10个条目,但上面的select查询只显示单个行。将count(*)作为上述查询的一部分混合是否是错误的?将count(*)作为选择查询的一部分是错误的

+0

任何理由为什么这必须在一个查询中完成? – 2011-04-15 12:12:48

+0

在MySQL中缺少窗口集合函数会强制您读取两次用户表。 – 2011-04-15 12:38:10

回答

2

COUNT是聚集功能。你不能将它混合到你的普通查询中。

如果你想收到十个条目只是做一个正常的选择:

SELECT id, name FROM users; 

,并获得条目数:

SELECT COUNT(id) FROM users; 
2

其监守你正在使用的查询的选择部分聚合函数,

返回10条记录,你只需要ID,并在FIRST_NAME查询。

EG:

SELECT id, first_Name 
FROM users 

,如果你想获得该表中的记录数,那么你可以使用

SELECT (Count(id)) 
FROM [users] 
+1

(在'function'之前加'aggregate'一词,我给你一个+1 cookie) - 授予 – 2011-04-15 12:14:02

+0

@Jeff Parker - 按要求:) – WraithNath 2011-04-15 12:15:17

1

不知道你想达到什么有了这个?

select id, first_name,(select count(*) from users) AS usercount from users; 

会给每个个人用户和总数,但再次,不知道为什么你会想要它。

2

这不是“错误”,但没有“group by”子句就没有意义 - 大多数数据库都会拒绝该查询,因为如果包含其他列,聚合函数应包含一个组。

1
select id, first_name from users,(select count(*) as total from users) as t; 
1

COUNT聚合函数,它会永远给你算表中的所有记录,除非结合使用组。

如果结合正常的查询使用它,那么它会决定最终的输出在你的情况下优先返回1.

如果你想返回所有10条记录,你应该只写 -

select id,first_name from users 
0

如果您需要表中的行数,则可以使用MySQL的SQL_CALC_FOUND_ROWS子句。检查MySQL文档以查看它是如何使用的。