Примените distinct к одному столбцу и упорядочьте по другому с помощью count

#mysql #sql-order-by #mysql-workbench #distinct #inner-query

#mysql #sql-порядок-по #mysql-верстак #отчетливый #внутренний запрос

Вопрос:

В базе данных MySQL у меня есть

 CustomerId productId modelNumber  CAnWgsN0 C9407R 300   CAnWgsN0 C5861W 300   CAnWgsN0 C9407R 400   CAnWgsN0 C5861W 600   CAnWgsN0 C9407R 300   KAuK9nB K3150Z 100   KAuK9nB6 K3150Z 100   

и я хочу, чтобы мой результат был таким

 customerId productId modelNumber Count  CAnWgsN0 C9407R 300 2  CAnWgsN0 C9407R 400 1  CAnWgsN0 C5861W 300 1  CAnWgsN0 C5861W 600 1  KAuK9nB6 K3150Z 100 2   

Я пытаюсь выполнить этот запрос, но не получаю желаемого результата. Как я могу применить distinct к номеру модели, а затем сгруппировать по идентификатору продукта.

 SELECT * FROM (SELECT customerId, productId, COUNT(modelNumber) As count,   ROW_NUMBER() OVER (PARTITION BY modelNumber ORDER BY productId) AS RowNumber  FROM customers) AS a WHERE a.RowNumber lt;=100 ;  

Он возвращает только одну строку.Я тоже пробовал этот запрос, но безуспешно

 SELECT productId, customerId, modelNumber, COUNT(modelNumber) AS count FROM customers WHERE modelNumber IN (SELECT DISTINCT modelNumber from customer ORDER BY productId);   

Ответ №1:

Если я чего-то не упускаю, ты просто хочешь GROUP BY customerId, productId, modelNumber

 WITH customers AS (  (SELECT 'CAnWgsN0' AS customerId, 'C9407R' AS productId, 300 AS modelNumber ) UNION ALL  (SELECT 'CAnWgsN0', 'C5861W', 300) UNION ALL  (SELECT 'CAnWgsN0', 'C9407R', 400) UNION ALL  (SELECT 'CAnWgsN0', 'C5861W', 600) UNION ALL  (SELECT 'CAnWgsN0', 'C9407R', 300) UNION ALL  (SELECT 'KAuK9nB6', 'K3150Z', 100) UNION ALL  (SELECT 'KAuK9nB6', 'K3150Z', 100))  SELECT customerId, productId, modelNumber, COUNT(*) AS count FROM customers GROUP BY customerId, productId, modelNumber;