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

Добавете няколко реда само в един ред от една таблица

Съгласен съм с другите отговори, че GROUP_CONCAT заедно с PHP разделянето на стойностите, разделени със запетая, е може би най-добрият подход, но ако по някаква друга причина имате нужда от изхода, който предложихте чрез Pure SQL, бих предложил един от следните подходи.

1. Самостоятелно се присъединява

SELECT  t1.Name, 
        MIN(t1.Subject) AS Sub1,
        MIN(t2.Subject) AS Sub2,
        MIN(t3.Subject) AS Sub3,
        MIN(t4.Subject) AS Sub4
FROM    Students t1
        LEFT JOIN Students T2 
            ON t1.Name = t2.Name 
            AND t2.Subject > t1.Subject
        LEFT JOIN Students T3 
            ON t2.Name = t3.Name 
            AND t3.Subject > t2.Subject
        LEFT JOIN Students T4 
            ON t3.Name = t4.Name 
            AND t4.Subject > t3.Subject
GROUP BY t1.Name;

2. Използване на функция за тип ROW_NUMBER за агрегиране

SELECT   Name,
         MAX(IF(RowNum = 1,Subject, NULL)) AS Sub1,
         MAX(IF(RowNum = 2,Subject, NULL)) AS Sub2,
         MAX(IF(RowNum = 3,Subject, NULL)) AS Sub3,
         MAX(IF(RowNum = 4,Subject, NULL)) AS Sub4
FROM     (    SELECT   Name,
                       Subject,
                       @r:= IF(@Name = Name, @r + 1, 1) AS RowNum,
                       @Name:= Name AS Name2
              FROM    Students,
                      (SELECT @Name:='') n,
                      (SELECT @r:= 0) r
              ORDER BY Name, Sno
          ) t
GROUP BY Name


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавете липсващ месец в резултата от заявката

  2. Проследяване на изходящи връзки

  3. Не мога да се свържа с mysql сървър на AWS RDS

  4. Формат на датата и изясняване на SQL заявката

  5. Как да вмъкна json данни в таблица?