拥有包含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个查询的情况下获得我想要的内容?
答案 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。