Подсчитайте разные значения - PullRequest
72 голосов
/ 14 января 2011

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

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

Что мне нужно, так это список, говорящий:

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

Ответы [ 4 ]

109 голосов
/ 14 января 2011

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

SELECT COUNT(DISTINCT column_name) FROM table_name;

РЕДАКТИРОВАТЬ:

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

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

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

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

Дайте мне знать, если это не совсем то, что вы ищете.

47 голосов
/ 18 января 2011

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

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

по мере необходимости.

1 голос
/ 13 декабря 2018

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

select count(customer) as count, pets
from table
group by pets
1 голос
/ 16 мая 2018

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

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

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...