mysql:如何从一个和每个组中提取多个表,然后结合到一个结果?

时间:2016-01-18 21:54:49

标签: mysql

我的表格如下:

+------+------+------+
| prov | amnt | type |
+------+------+------+
| on   |   10 | 1    |
| on   |   10 | 1    |
| on   |   12 | 2    |
| ab   |   10 | 1    |
| ab   |   12 | 2    |
| ab   |   12 | 2    |
| qc   |   12 | 2    |
| qc   |   13 | 3    |
| qc   |   13 | 3    |
+------+------+------+

我想返回一个表格,其中每个文件都有一个按类型分组的摘要,每个类型的总和和计数如下:

+------+-------+------+------+
| prov | total | type | count|
+------+-------+------+------+
| on   |    20 | 1    |     2| 
| on   |    12 | 2    |     2|
| ab   |    10 | 1    |     1|
| ab   |    24 | 2    |     2|
| qc   |    12 | 2    |     1|
| qc   |    26 | 3    |     2|
+------+-------+------+------+

基本上,如果我为每个省份进行三次手动输入查询,我会在三个不同的表格中获得三个不同查询的数据。

SELECT prov, SUM(fine) AS total, code, COUNT(code) AS COUNT 
FROM table 
WHERE prov = 'on' 
GROUP BY code;

   +------+-------+------+------+
   | prov | total | type | count|
   +------+-------+------+------+
   | on   |    20 | 1    |     2| 
   | on   |    12 | 2    |     2|
   +------+-------+------+------+

4 个答案:

答案 0 :(得分:0)

也许您可以使用像以下一样的SQL聚合:

SELECT *, COUNT(*) FROM tablename GROUP BY prov, type;

有关逐个功能的详细信息:see here

答案 1 :(得分:0)

prov添加到group by

SELECT prov, SUM(fine) AS total, code, COUNT(code) AS COUNT 
FROM table 
GROUP BY prov, code;

答案 2 :(得分:0)

您需要按照提示和类型进行分组。这就是你需要的:

static BOOL isRunningTests(void)
{
    NSDictionary* environment = [[NSProcessInfo processInfo] environment];
    NSString* injectBundle = environment[@"XCInjectBundle"];
    return [[injectBundle pathExtension] isEqualToString:@"xctest"];
}

答案 3 :(得分:0)

将您的查询更改为:

select    
`prov`, sum(`amnt`) as `total`, count(*) as `count`, `type`   
group by `prov`, `type`;