2011-01-14 2 views
59

У меня есть набор данных с просьбой указать, сколько у них есть домашних животных. Есть ли способ с одним запросом, я могу подсчитать различные значения (1,2,3 и т. Д.)? Спасибо!Подсчитайте различные значения

+----------+------+ 
| Customer | Pets | 
+----------+------+ 
|  20 | 2 | 
|  21 | 3 | 
|  22 | 3 | 
|  23 | 2 | 
|  24 | 4 | 
+----------+------+ 

То, что я хочу, это список изречение:

  • 2 было 2 Pets
  • 2 было 3 Домашние
  • 1 было 4 Питомцы

ответ

92

Вы можете сделать отличный считайте следующее:

SELECT COUNT(DISTINCT column_name) FROM table_name; 

EDIT:

После разъяснения и обновления к вопросу, я вижу теперь, что это совсем другой вопрос, чем мы изначально думали. «DISTINCT» имеет особое значение в SQL. Если я правильно понимаю, вы хотите что-то вроде этого:

  • 2 клиенты имели 1 домашних животных
  • 3 клиенты были 2 домашних животных
  • 1 клиентов было 3 домашних животных

Теперь вы, вероятно, чтобы использовать подзапрос:

select COUNT(*) column_name FROM (SELECT DISTINCT column_name); 

Сообщите мне, если это не совсем то, что вы ищете.

+0

Я попытался, что предыдущим с нулевым везением. Вот пример моих данных; Клиент | Домашние животные 20 | 2 21 | 3 22 | 3 23 | 2 24 | Я хочу этот список: 2 есть 2 Животные 2 имеет 3 Домашние животные 1 has 4 Pets – willlangford

+1

Подборка: Я думаю, что слишком много накладных расходов для такой простой задачи ... – maid450

+0

Я действительно искал оригинальную версию, и первая часть этого решения работала для меня. Спасибо, что не удалили! –

34

Хорошо, я удалил свой предыдущий ответ, потому что, в конце концов, это было не то, что искал Уильямфорд, но я решил, что, возможно, мы все недопонимали вопрос.

Сначала я подумал о SELECT DISTINCT..., но мне показалось слишком странным, что кто-то должен был знать, сколько людей было разных домашних животных, чем остальные ... вот почему я подумал, что, может быть, вопрос был недостаточно ясно.

Итак, теперь, когда реальное значение вопроса выяснено, делая подзапрос для этого его довольно накладных расходов, я бы предпочел бы использовать предложение GROUP BY.

Представьте, что вы имеете таблицу customer_pets так:

+-----------------------+ 
| customer | pets | 
+------------+----------+ 
| customer1 | 2  | 
| customer2 | 3  | 
| customer3 | 2  | 
| customer4 | 2  | 
| customer5 | 3  | 
| customer6 | 4  | 
+------------+----------+ 

затем

SELECT count(customer) AS num_customers, pets FROM customer_pets GROUP BY pets 

вернется:

+----------------------------+ 
| num_customers | pets | 
+-----------------+----------+ 
|  3  | 2  | 
|  2  | 3  | 
|  1  | 4  | 
+-----------------+----------+ 

, как вам нужно.

+0

Имя столбца в 'count (customer)' является излишним. Вы можете просто использовать: 'SELECT COUNT (*) AS num_customers, pets FROM customer_pets GROUP BY pets' – sgussman

+3

@sgussman Невероятно, если вы разрешаете значения NULL для' customer', тогда 'COUNT (customer)' не будет считать их, COUNT (*) 'или' COUNT (домашние животные) 'будет. В этом случае это зависит от того, какое поведение вы предпочитаете. В любом случае, даже если это не меняет большую часть времени, я хотел бы указать столбец, который я хочу подсчитать для удобочитаемости. – maid450

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