我在 MySQL 中有一个表,我正在尝试过滤来自 ColA 的数据并计算 ColB 中结果的实例,同时仍然获取所有匹配的行
表名称:CityCityStuff
ColA | ColB | ColC |
---|---|---|
A市 | B市 | 其他东西 |
A市 | C市 | 其他东西 |
B市 | C市 | 其他东西 |
B市 | A市 | 其他东西 |
B市 | A市 | 其他东西 |
C市 | A市 | 其他东西 |
C市 | A市 | 其他东西 |
C市 | B市 | 其他东西 |
C市 | 城市D | 其他东西 |
C市 | E城 | 其他东西 |
C市 | E城 | 其他东西 |
我想知道:
SELECT * FROM CityCityStuff WHERE ColA = 'CityC'
然后每个 ColB 重复多少次,同时仍然获得 ColA = CityC 的所有行
返回的结果如下所示:
ColA | ColB | ColC | 总计 |
---|---|---|---|
C市 | A市 | 其他东西 | 2 |
C市 | A市 | 其他东西 | 2 |
C市 | B市 | 其他东西 | 1 |
C市 | 城市D | 其他东西 | 1 |
C市 | E城 | 其他东西 | 2 |
C市 | E城 | 其他东西 | 2 |
或:
ColA | ColB | ColC | 总计 |
---|---|---|---|
C市 | A市 | 其他东西 | 2 |
C市 | A市 | 其他东西 | |
C市 | B市 | 其他东西 | 1 |
C市 | 城市D | 其他东西 | 1 |
C市 | E城 | 其他东西 | 2 |
C市 | E城 | 其他东西 |
您可以在 MariaDB 中使用这个
count()
windows 函数。
select
colA,
colB,
colC,
count(*) over (partition by colA, colB) as totalEach
from citycitystuff
where colA = 'CityC'
colA | colB | colC | 总计每个 |
---|---|---|---|
C市 | A市 | 其他东西 | 2 |
C市 | A市 | 其他东西 | 2 |
C市 | B市 | 其他东西 | 1 |
C市 | 城市D | 其他东西 | 1 |
C市 | E城 | 其他东西 | 2 |
C市 | E城 | 其他东西 | 2 |