MySQL Как определить 3 главных проблемы для строки / записи в столбцах, где столбцы - это числа, а столбцы - более 3 - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть приведенный ниже пример набора данных - мне нужно посмотреть для записи, какие 3 наиболее затронутые проблемы по количеству баллов по столбцам (10 или более) - это большой набор данных.

store|P|Q|L |J|K|D
DC12 |2|3|12|1|2|1
DC45 |3|1|3 |2|6|4
DC78 |5|5|4 |4|3|3
HF45 |1|2|4 |5|6|8

Я пробовал гуглить и смотреть на другие поставленные вопросы, но не могу найти ответ на свой вопрос.

Я не уверен, правильно ли я его формулирую, но яхотел бы как-то определить три главных проблемы каждого магазина по значению в столбцах

, то есть я ожидаю, что магазин DC12 вернется в виде L, Q и P или K в качестве первых 3 проблем.DC45, чтобы вернуться с K, D и L или P

Извинения, если это сформулировано неправильно или что-то очень простое.

1 Ответ

0 голосов
/ 20 сентября 2019

Используйте UNION ALL внутри CTE, чтобы вернуть все числовые значения в виде 1 столбца, и еще один CTE, чтобы вернуть первые 3 для каждого магазина с ROW_NUMBER().Наконец, сгруппируйте по магазинам:

with 
  cte as (
    select store, p as col, 'P' name from tablename union all
    select store, q, 'Q' from tablename union all
    select store, l, 'L' from tablename union all
    select store, j, 'J' from tablename union all
    select store, k, 'K' from tablename union all
    select store, d, 'D' from tablename
  ),
  ctern as (
    select *, row_number() over (partition by store order by col desc) rn
    from cte
  )
select store, string_agg(name, ',') within group (order by rn) [TOP ISSUES]
from ctern
where rn <= 3
group by store

См. Демоверсию .Результаты:

STORE | TOP ISSUES
DC12  | L,Q,P     
DC45  | K,D,L     
DC78  | Q,P,J     
HF45  | D,K,J     
...