[英]Concat of count and group concat and order by
我在想以一種相當怪異的方式從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的降序排列的所有唯一分數的列表,第三列需要是每個唯一分數的逗號分隔計數,因此像上面的示例一樣,對於第一個ID,它將是2, 1,2是因為該ID的得分為4,得分為2,得分為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
我需要做什么,除了它完全忽略order by並返回
229 | 3,2,4 | 1,2,2
233 | 1,4,5 | 2,1,1
240 | 3,4 | 1,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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.