我在想以一种相当奇怪的方式从数据库获取东西时遇到了一些麻烦。假设我有下一张 table
ID | Rating
229 | 3
229 | 2
229 | 4
229 | 2
240 | 3
233 | 1
233 | 4
233 | 1
233 | 5
229 | 4
240 | 4
我需要结果看起来像
229 | 0,2,1,2,0
233 | 1,1,0,0,2
240 | 0,1,1,0,0
基本上。评级在 1 到 5 之间变化。对于 id 没有的每个评级,我需要在第二列中输入 0。因此,对于 id 229,它是 0,2,1,2,0,因为它没有 5 和 1 评级;对于 240,它是 0,1,1,0,0,因为没有 5、2 和 1 评级。 目前我有疑问
select object_id, group_concat(qty order by rating desc) as qties
from (
select object_id, rating, count(rating) qty
from wp_fb_ratings
group by rating, object_id
) n
group by object_id
它选择我需要的内容,但它不会对缺失的评分进行“零填充”计数。可以做我想做的事吗?
最佳答案
你可以做到
SELECT id, GROUP_CONCAT(rating_count ORDER BY rating DESC) rating_count
FROM
(
SELECT l.id, l.rating, COUNT(r.rating) rating_count
FROM
(
SELECT id, rating
FROM
(
SELECT DISTINCT id
FROM wp_fb_ratings
) d CROSS JOIN
(
SELECT 1 rating UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5
) a
) l LEFT JOIN wp_fb_ratings r
ON l.id = r.id
AND l.rating = r.rating
GROUP BY l.id, l.rating
) q
GROUP BY id
输出:
| id | rating_count | |-----|--------------| | 229 | 0,2,1,2,0 | | 233 | 1,1,0,0,2 | | 240 | 0,1,1,0,0 |
这是一个 SQLFiddle 演示
关于mysql - 结果中 5 个可能值中缺少的值的“默认”值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29722476/