SELECT id具有最大ID数

时间:2013-01-10 01:57:49

标签: mysql sql select group-by having-clause

拥有包含item_id和color_id的产品表。我正在尝试使用大多数非null实例获取color_id。

这失败了:

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

Invalid use of group function

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

返回

color_id count
1, 323
2, 122
3, 554

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

有没有快速简便的方法可以在没有2个查询的情况下获得我想要的内容?

4 个答案:

答案 0 :(得分:14)

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;

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


用于编辑...

SELECT color_id, COUNT(*) FROM products WHERE color_id = 3;

答案 1 :(得分:5)

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)

更新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  
)

答案 2 :(得分:1)

SELECT 
  color_id, 
  COUNT(color_id) AS occurances
FROM so_test
GROUP BY color_id
ORDER BY occurances DESC
LIMIT 0, 1

这是一个示例小提琴,其中包含一个基本表格,显示它有效:sql fiddle

答案 3 :(得分:0)

为简单起见,请在Oracle中使用内置函数(仅适用于Oracle Database 11g +版本):

select stats_mode(color_id) from so_test 

这将返回出现最多的颜色ID。