Подсчитайте различные значения
У меня есть набор данных, спрашивающий у клиента, сколько у них есть домашних животных. Есть ли способ с одним запросом, я могу подсчитать различные значения (1,2,3 и т.д.)?
Спасибо!
+----------+------+
| Customer | Pets |
+----------+------+
| 20 | 2 |
| 21 | 3 |
| 22 | 3 |
| 23 | 2 |
| 24 | 4 |
+----------+------+
Что мне нужно, так это список:
- 2 имеет 2 домашних животных
- 2 имеет 3 домашних животных
- 1 из 4 домашних животных
Ответы
Ответ 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