【问题标题】:Using count with group without distinct elements将计数与没有不同元素的组一起使用
【发布时间】:2017-09-15 20:59:56
【问题描述】:

我有下表:

select id1, id2 from myTable

id1      id2
1        100
2        100          
3        100          
3        400          
4        200 

我想计算id1 的每个案例出现了多少次,同时将id2 的所有案例保留在第二列中,以便我收到下表:

id1      id2      count
1        100          1
2        100          1
3        100          2
3        400          2
4        200          1

以下查询给出了正确的计数,但仅显示 id1 的不同元素,因此它不会保留 id2 的所有情况

select id1, id2, count(id1) from myTable
group by id1

id1      id2      count
1        100          1
2        100          1
3        100          2
4        200          1

相反,我尝试了这个查询,按两列分组,它保留了所有信息,但没有给出我想要的计数:

select id1, id2, count(id1) from myTable
group by id1, id2

id1      id2      count
1        100          1
2        100          1
3        100          1
3        400          1
4        200          1

这感觉应该非常简单。这可以在单个查询中完成,还是必须使用子查询?如果是这样,子查询会是什么样子?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    试试这个:

    select id1, id2, 
           (select count(*) from mytable as t2 where t1.id1 = t2.id1) "count"
    from mytable as t1
    

    通过使用子选择作为列结果,您可以在输出中构建您想要的结构。

    【讨论】:

    • 非常低效:(
    • @TedFilippidis,请解释原因。那么,我可以改进我的代码;
    • 这可能是 MySQL 中最好的解决方案了。
    • @abe,子查询总是比较SGA/Processing/Slownless
    【解决方案2】:

    试试这个。

    SELECT 
        a.*, b.count
    FROM
        test.id a,
        (SELECT 
            id1, COUNT(id1) AS count
        FROM
            test.id
        GROUP BY id1) b
    WHERE
        a.id1 = b.id1;
    

    【讨论】:

      【解决方案3】:
      select id1, id2, count(id1)  OVER (PARTITION BY id1) from myTable
      

      【讨论】:

      • 嘿 Ted,当我尝试运行它时遇到语法错误。这适用于 mySQL 吗?
      • @Lance_P 你可能是对的,我有点像预言家,对不起!虽然 mySQL 现在是 Oracle 产品,但我正在努力追赶!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2013-12-23
      • 2018-09-20
      • 2020-01-27
      • 2011-10-05
      相关资源
      最近更新 更多