我有点麻烦,想要以相当奇怪的方式从db获取内容。说我有下一张桌子
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 | 4,3,2 | 2,1,2
240 | 4,3 | 1,1
233 | 5,4,1 | 1,1,2
基本上,我需要第二列作为此ID的desc顺序的所有唯一分数的列表,并且第3列需要以逗号分隔每个这些唯一分数的计数,因此就像上面的示例中一样,对于第一个id,它将是2,1,2因为该ID得分为2,得分为4,得分为3,得分为2,得分为2.这需要与第2栏中的内容顺序相同。我试过了
select object_id, group_concat(concat(rating)) list, group_concat(qty)
from (
select object_id, rating, count(rating) qty
from wp_fb_ratings
group by rating, object_id
order by rating desc
) n
group by object_id
我需要的是什么,除了它完全忽略了顺序并返回
229 | 3,2,4 | 1,2,2
233 | 1,4,5 | 2,1,1
240 | 3,4 | 1,1
这是什么解决方法?或者也许它应该以其他方式完成?
答案 0 :(得分:1)
如果我理解正确,您只需要一个子查询来计算计数,然后再进行最终聚合:
select id, group_concat(score order by score desc) as scores,
group_concat(cnt order by score desc) as counts
from (select id, score, count(*) as cnt
from table t
group by id, score
) t
group by id;
对于示例中的表格:
select object_id, group_concat(rating order by rating desc)as ratings,
group_concat(qty order by rating desc) as qtys
from (select object_id, rating, count(rating) as qty
from wp_fb_ratings
group by rating, object_id
) t
group by object_id;