2014-02-10 3 views
0

У меня есть ситуация, когда мне приходится подсчитывать количество строк разного типа в одном столбце таблицы, например. столбец будет иметь значения, такие как:Подсчитайте разные строки одного столбца в mysql

apple 
apple 
apple 
orange 
orange 
banana 
banana 
banana 
banana 

Так что мне нужно посчитать строки только разного типа, что означает, что запрос должен дать результат подсчета 3. Что может быть идеальным запрос для этого?

ответ

2

Вы можете рассчитывать различные значения, как это:

SELECT COUNT(DISTINCT column_name) FROM table_name; 
+0

Получение результата 1, им реализации на PHP, мой код является '$ запрос = mysql_query (" SELECT COUNT (DISTINCT semail) ОТ adpost "); $ count = mysql_num_rows ($ query); '@nes – FarwallGhost

+0

Выполнение echo' ' – FarwallGhost

+0

' mysql_num_rows' возвращает количество строк запроса, вам нужен сам query_result, попробуйте '$ a = mysql_fetch_assoc ($ query); print_r ($ a) ' – nes

2

Так используйте COUNT с DISTINCT струнного поля stringField в таблице t:

SELECT COUNT(DISTINCT stringField) FROM t 
0

Попробуйте это:

SELECT COUNT(DISTINCT colmnname) FROM tablename 
+0

Получение результата 1, im реализующий на php, мой код - '$ query = mysql_query (" SELECT COUNT (DISTINCT semail) FROM adpost "); $ count = mysql_num_rows ($ query); '@Micallef – FarwallGhost

0

Вместо использования простого COUNT(field), вы могли бы использовать COUNT(DISTINCT field):

SELECT COUNT(DISTINCT fieldname) FROM tablename 

Если ваши значения могут иметь различный верхний/нижний регистр вариантов, и вы все еще хотите только реальный уникальный (например, Banana такая же, как banana), то вы можете добавить lower функцию в смеси:

SELECT COUNT(DISTINCT lower(fieldname)) FROM tablename 
+0

Образец с' lower() 'нуждается в уточнении. Это необходимо только для сопоставлений, которые не являются '_CI' (то есть нечувствительны к регистру). Например, по умолчанию 'latin1' не' _CI', поэтому 'COUNT..DISTINCT' будет обрабатывать' Banana' и 'banana' как те же строки –

+0

@AlmaDo Достаточно справедливо, хотя, я думаю, вы имели в виду наоборот. '_CI' означает, что' Banana' и 'banana' одинаковы, но без' _CI' это будет. 'CI' действительно означает« без учета регистра ». –

+0

hm .. 'ci' означает« без учета регистра », правильно .. так? Я имею в виду, что сортировка не должна быть ci (то есть она должна отличаться в верхнем/нижнем случае) –

Смежные вопросы