SQL Query - Счет и сумма - Спортивная статистика

0

Я запускаю небольшой проект, где я пытаюсь вычислить количество событий из журнала. Каждая строка в журнале (переносится в таблицу) состоит из данных в соответствии с таблицей ниже.

У меня есть таблица, как показано ниже.

|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

Как это можно сделать, написав запрос?

Теги:

2 ответа

1
Лучший ответ

Это довольно уродливый запрос, но опять же ваши данные не выглядят нормализованными. Мы можем присоединиться к ряду подзапросов, которые набирают число букв для каждого из столбцов:

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

Изображение 174551

демонстрация

1

В 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;
  • 0
    Вот демо для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню