sql >> データベース >  >> RDS >> Mysql

mysql、行から列への転置/ピボット、変数選択

    SELECT  Install_DATE,
            MAX(CASE WHEN Install_DATE = '01-24-2013' THEN totalCount END) `01-24-2013`,
            MAX(CASE WHEN Install_DATE = '01-25-2013' THEN totalCount END) `01-25-2013`,
            MAX(CASE WHEN Install_DATE = '01-26-2013' THEN totalCount END) `01-26-2013`,
            .......
    FROM
    (
      SELECT DATE_FORMAT(packet_details.installDate,'%m-%d-%Y') as Install_Date,
             Count(packet_details.installDate) totalCount
      FROM   packet_details
      WHERE  packet_details.installDate >= CURRENT_DATE - INTERVAL 7 DAY AND 
             packet_details.installDate   < CURRENT_DATE + INTERVAL 7 DAY
      GROUP  BY installDate
    ) s
    

    不明な数のInstall_Date動的クエリ 非常に好ましい

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'MAX(CASE WHEN Install_DATE = ''',
          Install_Date,
          ''' then totalCount end) AS `', Install_Date, '`' )
      ) INTO @sql
    FROM 
    (
      SELECT DATE_FORMAT(packet_details.installDate,'%m-%d-%Y') as Install_Date,
             Count(packet_details.installDate) totalCount
      FROM   packet_details
      WHERE  packet_details.installDate >= CURRENT_DATE - INTERVAL 7 DAY AND 
             packet_details.installDate   < CURRENT_DATE + INTERVAL 7 DAY
      GROUP  BY installDate
    ) s;
    
    SET @sql = CONCAT('SELECT Install_DATE, ', @sql, ' 
                        FROM
                        (
                          SELECT DATE_FORMAT(packet_details.installDate,''%m-%d-%Y'') as Install_Date,
                                 Count(packet_details.installDate) totalCount
                          FROM   packet_details
                          WHERE  packet_details.installDate >= CURRENT_DATE - INTERVAL 7 DAY AND 
                                 packet_details.installDate   < CURRENT_DATE + INTERVAL 7 DAY
                          GROUP  BY installDate
                        ) s');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    



    1. MySQL-複雑さ:SELECT COUNT(*)FROM MyTable;

    2. Laravel4で検索機能を作成する

    3. 小さなテーブルから重複する行を削除する

    4. SQLでパーティション内の行をランク付けする方法