我正在运行一个小项目,尝试从日志中计算事件数。日志中的每一行(传输到表中)均包含下表中的数据。

我有一张桌子如下。

| 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


mysql - SQL查询-计数和总和-运动统计-LMLPHP

Demo

10-08 07:40