Выберите количество строк с уникальными значениями

У меня есть стол, в котором хранятся все товары, которые мы продали. В Заказе может быть более одного предмета.

Я хочу найти самые популярные комбинации цвет-предмет, где заказ содержит ТОЛЬКО 1 предмет. Мне интересно, возможно ли найти это в одном операторе MySQL (возможно, используя вложенные Selects). Я пробовал несколько вещей, но безуспешно.

ProductName | Color | OrderNum | 
--------------------------------
productA    | black | 1
productA    | black | 1
productA    | black | 2
productA    | black | 3
productA    | black | 4
productA    | black | 4
productA    | black | 5

так "

SELECT COUNT(ProductName), ProductName WHERE ~~COUNT(OrderNum)=1~~ GROUP BY ProductName, Color

покажет:

COUNT(ProductName) | ProductName | Color
      3            | ProductA    | black

В действительности у меня есть множество продуктов и более 50 цветов.

Что я пробовал:

SELECT COUNT(ProductName), ProductName,Color, 
       (SELECT COUNT(OrderNum) FROM Items GROUP BY OrderNum) AS itemcount 
FROM Items WHERE 1 
GROUP BY ProductName,Color HAVING itemcount = 1

SELECT COUNT( ProductName ) , ProductName, Color
FROM Items
WHERE (SELECT COUNT( OrderNum ) AS itemcounts
       FROM Items GROUP BY OrderNum
) =1
GROUP BY ProductName

--"Подзапрос возвращает более 1 ряд"

Спасибо за вашу помощь.

2 ответа

Решение

Запрос:

SQLFIDDLEExample

SELECT
COUNT(*) as count, i.ProductName, i.Color
FROM ITems i
WHERE 1 = (SELECT COUNT( OrderNum ) AS itemcounts
           FROM Items 
           WHERE OrderNum = i.OrderNum
           )
GROUP BY ProductName, Color

Результат:

| COUNT | PRODUCTNAME | COLOR |
-------------------------------
|     3 |    productA | black |

Попробуй это:

SELECT ProductName, color, COUNT(ProductName) 
FROM (SELECT ProductName, color, orderNum FROM Items 
      GROUP BY ProductName, orderNum HAVING COUNT(orderNum)=1) AS A
Другие вопросы по тегам