2013-12-03 4 views
2

Допустим, это мой DB таблица: идентификатор, client_id, ORDER_NAMEMySQL Подсчет различных элементов в одном запросе

Каждый удвоилась порядок создания новой записи. Например:

1, 1, super-glue 
2, 1, super-glue 
3, 1, plastic wallet 

Как я могу найти в одном запросе, сколько заказчиков разных предметов заказаны?

Таким образом, он вернет мне 2 в этом случае.

Я знаю, что мне нужно использовать SELECT {something in here} WHERE client_id = 1 Но я не уверен, как считать разные предметы.

+0

Почему 2 и не 1? Пожалуйста, объясните больше – DevelopmentIsMyPassion

+0

, потому что было куплено два предмета с разными именами. –

ответ

2

Чтобы просто рассчитывать различные элементы для одного клиента вы можете использовать

SELECT COUNT(DISTINCT order_name) 
FROM orders 
WHERE client_id=1; 

Если вы хотите краткий подсчет для каждого клиента вы можете использовать group by выражение:

SELECT client_id, COUNT(DISTINCT order_name) 
FROM orders 
GROUP BY client_id; 

Если вы хотите получить последнюю строку за канун чень клиентов и ORDER_NAME, вы можете использовать подзапрос:

SELECT id, client_id, order_name 
FROM 
(
    SELECT max(id) AS id 
    FROM orders 
    GROUP BY client_id, order_name 
) single_orders 
INNER JOIN orders ON single_orders.id = orders.id 
ORDER BY client_id, order_name; 

Это будет выбирать максимальный идентификатор для каждого отдельного клиента-заказ-комбинации, а затем получить соответствующие данные строки.

Наконец, в MySQL вы также можете получить список разделенных запятых из различных элементов упорядоченного любого клиента:

SELECT client_id, group_concat(DISTINCT order_name ORDER BY order_name) 
FROM orders 
GROUP BY client_id 
ORDER BY client_id; 
3

Использование COUNT с DISTINCT ORDER_NAME:

SELECT COUNT(DISTINCT order_name) 
FROM yourTable 
WHERE client_id = 1 
+0

Что будет возвращать этот запрос? 1-я или 2-я запись – DevelopmentIsMyPassion

+0

ой, я понял. Теперь я понял, чего хочет пользователь. – DevelopmentIsMyPassion

+0

Это вернет 2, а не записи. ОП попросил их подсчитать. Это сообщит вам количество имен «DISTINCT» order_names, и это 2 –

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