【问题标题】:mysql group by 2 columns combine resultsmysql按2列分组合并结果
【发布时间】:2012-08-16 01:08:21
【问题描述】:

我正在尝试弄清楚我想如何构造这个查询并且遇到了一些困难。

基本上,我试图在 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 的列,它可以包含rb_1 的所有id。

当我尝试按 2 列分组时,它只会将组视为两列的组合。

如果我使用我的第一个查询两次,每列一次,我可以用 PHP 编写一个快速脚本来组合和排序计数,但我认为可能有一种方法可以用 MySQL 来做到这一点。

【问题讨论】:

    标签: mysql group-by query-optimization


    【解决方案1】:

    下面的查询应该做你想做的事:

    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;
    

    【讨论】:

    • 它抛出一个“每个派生表必须有自己的别名”错误,所以我只是在括号部分之后分配了一个任意的 AS table_name_here,它工作正常。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多