SELECT id具有最大ID数

a c*_*der 14 mysql sql select group-by having-clause

有一个带有item_id和color_id的product表.我正在尝试使用大多数非null实例获取color_id.

这失败了:

SELECT color_id 
  FROM products 
 WHERE item_id=1234 
 GROUP BY item_id 
HAVING MAX(COUNT(color_id))
Run Code Online (Sandbox Code Playgroud)

Invalid use of group function
Run Code Online (Sandbox Code Playgroud)

这个

SELECT color_id, COUNT(color_id)
  FROM products 
 WHERE item_id=1234 
 GROUP BY item_id
Run Code Online (Sandbox Code Playgroud)

返回

color_id count
1, 323
2, 122
3, 554
Run Code Online (Sandbox Code Playgroud)

我正在寻找具有最多实例的color_id 3.

有没有2个查询可以快速简便地获得我想要的东西?

mat*_*ers 18

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;
Run Code Online (Sandbox Code Playgroud)

这将为您提供color_id和color_id的计数,计数从最大到最小排序.我想这就是你想要的.


为你的编辑...

SELECT color_id, COUNT(*) FROM products WHERE color_id = 3;
Run Code Online (Sandbox Code Playgroud)

  • @GordonLinoff`限制1`。如果有多个实例具有相同的*最大*计数怎么办? (2认同)
  • 考虑这个结果,`1,100`,`2,100`,`3,50`. (2认同)

Joh*_*Woo 9

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)
Run Code Online (Sandbox Code Playgroud)

更新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  
)
Run Code Online (Sandbox Code Playgroud)