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