MySQL查询 - 分组值和聚合

时间:2013-04-26 02:32:07

标签: mysql sql

我将以下查询发送到我的表:

SELECT code_ver, 
       platform_type, 
       category_name 
FROM   builds 
WHERE  runtype LIKE 'test' 
       AND platform_type NOT LIKE 'total'; 

+-----------+---------------+---------------+
| code_ver  | platform_type | category_name |
+-----------+---------------+---------------+
| 10.0.1.50 | 8k            | UMTS          | 
| 10.0.1.50 | 8k            | UMTS          | 
| 10.0.1.50 | 8k            | IP            | 
| 10.0.1.50 | 8k            | IP            | 
| 10.0.1.50 | 9k            | IP            | 
| 10.0.1.50 | 9k            | IP            | 
| 10.0.1.50 | 9k            | UMTS          | 
| 10.0.1.50 | 9k            | UMTS          | 
| 10.0.1.50 | 9k            | UMTS          | 
| 10.0.1.50 | 9k            | Stability     | 
| 10.0.1.50 | 9k            | Stability     | 
| 10.0.1.51 | 8k            | UMTS          | 
| 10.0.1.51 | 8k            | UMTS          | 
| 10.0.1.51 | 8k            | IP            | 
| 10.0.1.51 | 8k            | IP            | 
| 11.0.1.50 | 9k            | UMTS          | 
| 11.0.1.50 | 9k            | IP            | 
+-----------+---------------+---------------+

我触发以下查询

SELECT code_ver, 
       platform_type, 
       Count(*) 
FROM   builds 
WHERE  runtype LIKE 'test' 
       AND platform_type NOT LIKE 'total' 
GROUP  BY code_ver, 
          platform_type; 

+-----------+---------------+----------+
| code_ver  | platform_type | count(*) |
+-----------+---------------+----------+
| 10.0.1.50 | 8k            |        4 | 
| 10.0.1.50 | 9k            |        7 | 
| 10.0.1.51 | 8k            |        4 | 
| 11.0.1.50 | 9k            |        2 | 
+-----------+---------------+----------+

当我触发以下查询时

SELECT code_ver, 
       platform_type, 
       Count(*) 
FROM   builds 
WHERE  runtype LIKE 'test' 
       AND platform_type NOT LIKE 'total' 
GROUP  BY code_ver, 
          platform_type,
          category_name; 

+-----------+---------------+----------+
| code_ver  | platform_type | count(*) |
+-----------+---------------+----------+
| 10.0.1.50 | 8k            |        2 | 
| 10.0.1.50 | 8k            |        2 | 
| 10.0.1.50 | 9k            |        2 | 
| 10.0.1.50 | 9k            |        2 | 
| 10.0.1.50 | 9k            |        3 | 
| 10.0.1.51 | 8k            |        2 | 
| 10.0.1.51 | 8k            |        2 | 
| 11.0.1.50 | 9k            |        1 | 
| 11.0.1.50 | 9k            |        1 | 
+-----------+---------------+----------+

但我希望计算(code_ver + platform_type + category_name)的唯一组合,以使输出看起来像这样:

+-----------+---------------+----------+
| code_ver  | platform_type | count(*) |
+-----------+---------------+----------+
| 10.0.1.50 | 8k            |        2 | 
| 10.0.1.50 | 9k            |        3 | 
| 10.0.1.51 | 8k            |        2 | 
| 11.0.1.50 | 9k            |        2 | 
+-----------+---------------+----------+

有人可以在这里给我一些建议。

2 个答案:

答案 0 :(得分:3)

使用SQL内部查询。

SELECT ta.code_ver, 
   ta.platform_type, 
   Count(*) 
FROM (SELECT code_ver, platform_type
      FROM   builds 
      WHERE  runtype LIKE 'test' 
          AND platform_type NOT LIKE 'total'
      GROUP  BY code_ver, platform_type, category_name) AS ta -- table alias
GROUP BY ta.code_ver, ta.platform_type;

答案 1 :(得分:0)

根据您提供的结果集,您似乎也希望按category_name

进行分组
    SELECT code_ver, 
           platform_type,
           Count(*) ,
           category_name
    FROM   builds 
    WHERE  runtype LIKE 'test' 
           AND platform_type NOT LIKE 'total' 
    GROUP  BY code_ver, 
              platform_type,
              category_name; 
相关问题