对特征列同时进行聚合计数统计

一份明细数据,结构是user_id和3类特征列(特征列的值范围都是0-2),如何对各特征列同时聚合,展示各特征列各个范围值的计数。
样例数据如下:

create table t526 (
user_id int,
a_times int,
b_times int,
c_times int
);
INSERT into t526 VALUES(101,1,0,2),(102,2,1,2),(103,1,1,2),(104,0,2,2),(105,1,1,1),(106,1,2,2),(107,1,1,1),(108,2,2,2),(109,2,0,2),(110,1,2,2);


通过join的方式可以
SELECT* FROM (SELECT a_times as times ,count(1) as a_times from t526 GROUP BY a_times)A
left join (SELECT b_times as times ,count(1) as b_times from t526 GROUP BY b_times)B using(times)
left join (SELECT C_times as times ,count(1) as C_times from t526 GROUP BY C_times)C using(times)

img

因为在实际中查询较为复杂,想请教下,是否有巧妙的办法可以直接聚合出来,

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/735895
  • 除此之外, 这篇博客: 逻辑删除记录时-保证业务的唯一性约束中的 分布式锁(对User_id与name加锁) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    对于创建Novel时候事先对该用户预留该名字,相同用户再次预留该名字时候就会失败。

    弊端:首次预留名字的创建失败,导致第二次预约的登陆用户也不可用该名字,体验不好。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^