web-dev-qa-db-fra.com

SELECT id AYANT un nombre maximum d'id

Ayez une table de produits avec item_id et color_id. J'essaie d'obtenir le color_id avec le plus d'instances non nulles.

Cela échoue:

SELECT color_id 
  FROM products 
 WHERE item_id=1234 
 GROUP BY item_id 
HAVING MAX(COUNT(color_id))

avec

Invalid use of group function

Ce

SELECT color_id, COUNT(color_id)
  FROM products 
 WHERE item_id=1234 
 GROUP BY item_id

Retour

color_id count
1, 323
2, 122
3, 554

Je recherche color_id 3, qui a le plus d'instances.

Existe-t-il un moyen rapide et facile d'obtenir ce que je veux sans 2 requêtes?

14
a coder
SELECT color_id AS id, COUNT(color_id) AS count 
FROM products 
WHERE item_id = 1234 AND color_id IS NOT NULL 
GROUP BY color_id 
ORDER BY count DESC
LIMIT 1;

Cela vous donnera le color_id et le compte sur ce color_id ordonné par le compte du plus grand au moins. Je pense que c'est ce que tu veux.


pour votre montage ...

SELECT color_id, COUNT(*) FROM products WHERE color_id = 3;
16
matt walters
SELECT color_id
FROM
    (
        SELECT  color_id, COUNT(color_id) totalCount
        FROM    products 
        WHERE   item_id = 1234 
        GROUP   BY color_id 
    ) s
HAVING totalCount = MAX(totalCount)

MISE À JOUR 1

SELECT  color_id, COUNT(color_id) totalCount
FROM    products 
WHERE   item_id = 1234 
GROUP   BY color_id 
HAVING  COUNT(color_id) =
(
  SELECT  COUNT(color_id) totalCount
  FROM    products 
  WHERE   item_id = 1234 
  GROUP   BY color_id 
  ORDER BY totalCount DESC
  LIMIT 1  
)
8
John Woo
SELECT 
  color_id, 
  COUNT(color_id) AS occurances
FROM so_test
GROUP BY color_id
ORDER BY occurances DESC
LIMIT 0, 1

Voici un exemple de violon avec un tableau de base qui montre qu'il fonctionne: sql fiddle

1
drneel