我正在运行一个小项目,尝试从日志中计算事件数。日志中的每一行(传输到表中)均包含下表中的数据。
我有一张桌子如下。
| NN | XX | YY | ZZ |
+ --- + ---- + ---- + ---- +
| A | A | B | |
| B | B | A | C |
| A | A | C | B |
| C | C | B | A |
| C | C | A | |
想转移到下表中。
| NN | XX | YY | ZZ |
+ --- + ---- + ---- + ---- +
| A | 2 | 2 | 1 |
| B | 1 | 2 | 1 |
| C | 2 | 1 | 1 |
含义:对于NN列中的每个唯一值,请计数XX,YY和ZZ列中NN值的数量
如何通过编写查询来完成?
最佳答案
这是一个非常丑陋的查询,但是您的数据似乎并没有被规范化。我们可以加入一系列子查询,这些子查询为每个列查找字母计数:
SELECT
t.NN,
xx.cnt_xx AS XX,
yy.cnt_yy AS YY,
zz.cnt_zz AS ZZ
FROM ( SELECT DISTINCT NN FROM yourTable ) t
LEFT JOIN ( SELECT XX, COUNT(*) AS cnt_xx FROM yourTable GROUP BY XX ) xx
ON t.NN = xx.XX
LEFT JOIN ( SELECT YY, COUNT(*) AS cnt_yy FROM yourTable GROUP BY YY ) yy
ON t.NN = yy.YY
LEFT JOIN ( SELECT ZZ, COUNT(*) AS cnt_zz FROM yourTable GROUP BY ZZ ) zz
ON t.NN = zz.ZZ
Demo