postgresql SQL-按两列分组,取平均值并计算每个案例的样本数

ldxq2e6h  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(162)

我的table看起来像下面

x   y    z
a   ab   2
a   ab   4
a   ac   4
b   ab   6
b   ab   4
b   ad   8
c   ac   10
c   ac   10

字符串
我要找的是这个:

x   y    avg_z  number_of_sample
a   ab   3      2
a   ac   4      1
b   ab   5      2
b   ad   8      1
c   ac   10     2


基本上我现在有这个:

SELECT x, y, AVG(z) AS avg_z
FROM table1
GROUP BY x, y


但我不能为每种情况创建一个带有样本数量的下一列。你知道我该怎么解决吗?
谨致问候

zyfwsgd6

zyfwsgd61#

您可以按以下方式执行此操作:

SELECT x, y, AVG(z) AS avg_z, COUNT(*) AS number_of_sample
FROM table1
GROUP BY x, y

字符串

ttcibm8c

ttcibm8c2#

简短回答

SELECT x, y, AVG(z) AS avg_z, COUNT(*) AS number_of_sample
FROM table1
GROUP BY x, y

字符串

长答案(数据库如何执行查询)

假设我们有一个名为data的表,其中包含以下数据:
| 是的| y |
| --| ------------ |
| 一个| 1 |
| 二个| 2 |
| 一个| 1 |
| 三个| 3 |
| 二个| 2 |

第一步:取数

数据库引擎从数据表中检索数据。

第二步:分组

数据基于列x和y中的值的唯一组合进行分组。分组如下:
第1组:(x =“A”,y=1)
| 是的| y |
| --| ------------ |
| 一个| 1 |
| 一个| 1 |
第2组:(x =“B”,y=2)
| 是的| y |
| --| ------------ |
| 二个| 2 |
所以剩下的值是1

第三步:聚合

对于每个组,应用COUNT()函数来计算每个组中出现的次数:
组1:(x ='A',y=1),COUNT(
)= 2
组2:(x ='B',y=2),COUNT(*)= 1
等等

第四步:生成结果

生成最终结果集,将分组的列(x和y)与每个组的计算occurrence_count相结合:
| 是的|出现次数| occurrence_count |
| --|--| ------------ |
| 一个|二个| 2 |
| 二个|一个| 1 |
| 三个|一个| 1 |
| 二个|一个| 1 |

第五步:查询完成

结果集将呈现给请求数据的用户或应用程序。

相关问题