Выберите количество строк с уникальными значениями
У меня есть стол, в котором хранятся все товары, которые мы продали. В Заказе может быть более одного предмета.
Я хочу найти самые популярные комбинации цвет-предмет, где заказ содержит ТОЛЬКО 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 ответа
Решение
Запрос:
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