Я запускаю небольшой проект, где я пытаюсь вычислить количество событий из журнала. Каждая строка в журнале (переносится в таблицу) состоит из данных в соответствии с таблицей ниже.
У меня есть таблица, как показано ниже.
|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 подсчитывается число значений NN в столбцах XX, YY и ZZ
Как это можно сделать, написав запрос?
Это довольно уродливый запрос, но опять же ваши данные не выглядят нормализованными. Мы можем присоединиться к ряду подзапросов, которые набирают число букв для каждого из столбцов:
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 это немного сложно. Ты можешь использовать:
select t.NN,
(select count(XX) from 'table' where XX = t.NN) as 'XX',
(select count(YY) from 'table' where YY = t.NN) as 'YY',
(select count(ZZ) from 'table' where ZZ = t.NN) as 'ZZ'
from (select distinct NN from 'table') as t;