mysql:如何从一个表中提取多个表,并在每个表中分组,然后组合成一个结果?

mysql:如何从一个表中提取多个表,并在每个表中分组,然后组合成一个结果?,mysql,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 |

我的桌子看起来像这样:

+------+------+------+
| 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都有一个按类型分组的摘要,每个类型的总和和计数如下:

+------+-------+------+------+
| 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|
   +------+-------+------+------+

也许您可以使用sql聚合,如:

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

有关分组依据功能的更多信息:.

prov
添加到
分组依据

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

您需要按prov和type进行分组。以下是您需要的:

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

将您的查询更改为:

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