2011-04-15 60 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文檔以查看它是如何使用的。