2017-04-19 17 views
0

試圖做一個表不同的計數但似乎永遠不會大於1,剝離其右後衛最簡單的形式...MySQL的計數明顯總是返回「1」

MariaDB [cwos]> SELECT count(distinct 'cr') FROM cr_import WHERE cr_import.com_on_date = '2017-03-22'; 
+----------------------+ 
| count(distinct 'cr') | 
+----------------------+ 
|     1 | 
+----------------------+ 
1 row in set (0.00 sec) 

MariaDB [cwos]> SELECT count('cr') FROM cr_import WHERE cr_import.com_on_date = '2017-03-22'; 
+-------------+ 
| count('cr') | 
+-------------+ 
|   110 | 
+-------------+ 
1 row in set (0.00 sec) 

在這個例子中都應該得到同樣的結果,CR是一個獨特的領域,因此所有110應該對不同的,你可以看到被計數......

MariaDB [cwos]> SELECT cr FROM cr_import WHERE cr_import.com_on_date = '2017-03-22' limit 5; 
+------------+ 
| cr   | 
+------------+ 
| 8907246/17 | 
| 9213268/17 | 
| 9213270/17 | 
| 9213271/17 | 
| 9213273/17 | 
+------------+ 
5 rows in set (0.00 sec) 

我錯過了簡單的東西? (對於實際查詢,不能使用count(cr),因爲在與其他表連接時cr是唯一的,因此我可以使用不同的重複項,因此使用不同的)

回答

2

由於'cr'是一個字符串,而不是一列。刪除這些報價,一切都應該罰款:

SELECT COUNT(DISTINCT cr) 
FROM cr_import 
WHERE cr_import.com_on_date = '2017-03-22' 

至於爲什麼計數顯示爲1,你算字符串常量是爲所有記錄相同。

+0

DOH!是完全白癡的時刻...謝謝:) – Dan

0

請勿使用cr請使用引號!用途:

COUNT(DISTINCT cr)

0

替換它你可以做一個重複計數如下:

SELECT COUNT(DISTINCT column_name) FROM table_name; 

所以你的情況,應該是這樣的:

SELECT COUNT(DISTINCT cr) FROM cr_import WHERE cr_import.com_on_date = '2017-03-22';