2010-09-02 92 views

回答

5

嘗試使用COUNT(DISTINCT())

返回不同的非NULL EXPR行數的計數值。

所以,你的查詢會是這樣

SELECT COUNT(DISTINCT(user_ip)) 
FROM table 
WHERE timestamp BETWEEN Y and Z 
+0

如果是這樣的話: SELECT COUNT(DISTINCT(user_ip)) FROM表 WHERE URI = 'x' 和 WHERE時間戳之間的Y和Z 並使這種高效別忘了創建像指數: 'idx_myindesx'(user_ip,uri,timestamp) – Ernest 2010-09-02 15:34:00

+0

如果我創建索引,我是否需要更改查詢呢? – Plasticated 2010-09-02 15:57:07

+0

@Plasticated否,查詢仍然可以正常工作,創建索引可能有助於加快MySQL在內部處理它的方式 - http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html – ConroyP 2010-09-02 16:03:40

1

DISTINCT關鍵字強制執行,只有唯一項查詢返回。正如ConroyP的上述回答所提到的,您可以在SQL中的其他函數中嵌套DISTINCT。請注意,這與'UNIQUE'具有不同的功能,該功能在SQL的數據定義語言部分中實施唯一性約束。有些數據庫還允許您在查詢中用關鍵字UNIQUE替代DISTINCT - 但這似乎並不適用於任何地方。