Подтвердить что ты не робот

Подсчитайте различные значения

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

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

Что мне нужно, так это список:

  • 2 имеет 2 домашних животных
  • 2 имеет 3 домашних животных
  • 1 из 4 домашних животных
4b9b3361

Ответ 1

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

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);

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

Ответ 2

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

Я также сначала подумал о 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     |
+-----------------+----------+

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

Ответ 3

Я думаю, что эта ссылка довольно хорошая.

Пример вывода по этой ссылке:

mysql> SELECT cate_id,COUNT(DISTINCT(pub_lang)), ROUND(AVG(no_page),2)
    -> FROM book_mast
    -> GROUP BY cate_id;
+---------+---------------------------+-----------------------+
| cate_id | COUNT(DISTINCT(pub_lang)) | ROUND(AVG(no_page),2) |
+---------+---------------------------+-----------------------+
| CA001   |                         2 |                264.33 | 
| CA002   |                         1 |                433.33 | 
| CA003   |                         2 |                256.67 | 
| CA004   |                         3 |                246.67 | 
| CA005   |                         3 |                245.75 | 
+---------+---------------------------+-----------------------+
5 rows in set (0.00 sec)

Ответ 4

Вы можете использовать это:

select count(customer) as count, pets
from table
group by pets