【问题标题】:MySQL count on GroupingMySQL依靠分组
【发布时间】:2013-09-09 19:19:06
【问题描述】:

我想统计查询中分组出现的次数。

SELECT COL1, 
       COL2, 
       *(count COL1)* 
  FROM TABLE 
 GROUP BY COL1, COL2

所以我希望看到这样的结果:

COL1, COL2, Count

A,    A,    1
A,    B,    2
B,    A,    1
B,    B,    2
B,    C,    3

Count(*) 会给我分组行的总和,这是我不想要的,但我似乎无法理解它或找到一种方法来做到这一点。无论如何,提前谢谢。

【问题讨论】:

标签: mysql sql


【解决方案1】:

您应该添加auto_increment 列来下订单。之后,尝试这样的事情:

 SELECT a.col1, a.col2,
                  (SELECT Count(*) From T1 c 
                   WHERE c.col1 = a.col1 
                   AND c.ID <= a.ID) as count
 FROM T1 a;

SQL Fiddle

或者没有auto_increment试试这个:

SELECT col1, col2,
   (select count(*) from T1 t2
    where t2.col2 <= t1.col2 and
          t2.col1 = t1.col1 
   ) as Enumeration
FROM T1 t1
GROUP BY col1, col2;

SQL Fiddle

【讨论】:

  • 我喜欢这样,但不幸的是,添加包括 auto_increment 在内的任何其他字段都不是一种选择。
  • @JoeMalloy 欢迎您,如果它适合您,请将其标记为答案。
【解决方案2】:

您的查询(带有适当放置的括号)执行您想要的操作:

SELECT COL1, COL2, count(*)
FROM TABLE
GROUP BY COL1, COL2;

如果您想要列的 sum,请使用 sum() 函数。

编辑:

如果您尝试枚举组(尽管问题用相当清晰的英语提出),您可以这样做:

SELECT col1, col2,
       (select count(*)
        from table t2
        where t2.col1 = t.col1 and
              t2.col2 <= t.col2
       ) as Enumeration
FROM table t1
GROUP BY col1, col2;

【讨论】:

  • 它不会产生想要的输出。
  • 不,不是,我需要对每个分组的 COL1 进行计数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多