我正在试图弄清楚我是如何构建这个查询的,并且遇到了一些困难。
基本上,我试图计算一行中最常用的id,其中id表示另一个表中的对象,除了id可以出现在2列中。
当我刚刚访问一列时,此查询工作正常:
SELECT rb_1,
Count(*) AS num
FROM ci_lineups
GROUP BY rb_1
ORDER BY Count(*) DESC
LIMIT 10
但是现在我想要做类似的事情,除了检查一个名为rb_2
的列,它可以拥有所有id rb_1
。
当我尝试按2列分组时,它只将组视为两列的组合。
我可以在PHP中编写一个快速脚本来组合和排序计数,如果我使用我的第一个查询两次,每列一次,但我认为可能有一种方法可以使用MySQL。
答案 0 :(得分:2)
以下查询应该执行您想要的操作:
SELECT field, sum(cnt)
FROM (
SELECT rb_1 as field, count(*) as cnt
FROM ci_lineups
GROUP BY rb_1
UNION ALL
SELECT rb_2 as field, count(*) as cnt
FROM ci_lineups
GROUP BY rb_2
)
GROUP BY field
ORDER BY sum(cnt) DESC
LIMIT 10;