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;