Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql въртяща таблица със стойности на низове

В зависимост от версията на mysql който използвате, ето един подход за установяване на row_number на група, след което се използва conditional aggregation групирани по този номер на ред:

select 
    rn, 
    max(case when stuff = 'bag' then name end) 'bag',
    max(case when stuff = 'book' then name end) 'book',
    max(case when stuff = 'shoes' then name end) 'shoes' 
from (
  select *, row_number() over (partition by stuff order by name) rn
  from stuff_table
) t
group by rn

Тъй като използвате по-стара версия на mysql , ще трябва да използвате user-defined variables за установяване на номера на реда. След това останалото работи по същия начин. Ето един пример:

select 
    rn, 
    max(case when stuff = 'bag' then name end) 'bag',
    max(case when stuff = 'book' then name end) 'book',
    max(case when stuff = 'shoes' then name end) 'shoes' 
from (
  select *, 
  ( case stuff 
         when @curStuff
         then @curRow := @curRow + 1 
         else @curRow := 1 and @curStuff := stuff 
   end
  ) + 1 AS rn
  from stuff_table, (select @curRow := 0, @curStuff := '') r
  order by stuff
) t
group by rn


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails ActiveRecord обработва колона с идентификатор, която не е първичен ключ

  2. Random() в MySql?

  3. Може ли AUTO_INCREMENT да се използва безопасно в BEFORE TRIGGER в MySQL

  4. Проверка на грешка за подготвени изявления за PDO

  5. Мигриране на база данни на Oracle към MySQL на AWS, част 1