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

SQL GROUP_CONCAT разделен на различни колони

Можете да направите това с substring_index() . Следната заявка използва вашата като подзаявка и след това прилага тази логика:

select Name, ISOCode_2,
       substring_index(currencies, ',', 1) as Currency1,
       (case when numc >= 2 then substring_index(substring_index(currencies, ',', 2), ',', -1) end) as Currency2,
       (case when numc >= 3 then substring_index(substring_index(currencies, ',', 3), ',', -1) end)  as Currency3,
       (case when numc >= 4 then substring_index(substring_index(currencies, ',', 4), ',', -1) end)  as Currency4,
       (case when numc >= 5 then substring_index(substring_index(currencies, ',', 5), ',', -1) end)  as Currency5,
       (case when numc >= 6 then substring_index(substring_index(currencies, ',', 6), ',', -1) end)  as Currency6,
       (case when numc >= 7 then substring_index(substring_index(currencies, ',', 7), ',', -1) end)  as Currency7,
       (case when numc >= 8 then substring_index(substring_index(currencies, ',', 8), ',', -1) end)  as Currency8
from (SELECT country.Name, country.ISOCode_2, group_concat(currency.name) AS currencies,
             count(*) as numc
      FROM country
      INNER JOIN countryCurrency ON country.country_id = countryCurrency.country_id
      INNER JOIN currency ON currency.currency_id = countryCurrency.currency_id
      GROUP BY country.name
     ) t

Изразът substring_index(currencies, ',' 2) взема списъка във валути до втората. За Американска Сомоа това би било 'US Dollar,Kwanza' . Следващото обаждане с -1 тъй като аргументът взема последния елемент от списъка, който би бил 'Kwanza' , което е вторият елемент от currencies .

Също така имайте предвид, че SQL заявките връщат добре дефиниран набор от колони. Една заявка не може да има променлив брой колони (освен ако не използвате динамичен SQL чрез prepare изявление).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SELECT COUNT() срещу mysql_num_rows();

  2. MySql SQL_CALC_FOUND_ROWS деактивиране на клаузата за ред

  3. mysql Къде не в използването на две колони

  4. SQLAlchemy чрез Paramiko SSH

  5. Синтаксис на SQL DROP TABLE – Изброен от СУБД