使用SQL进行压缩查询

hol*_*den 2 mysql sql group-by aggregate sql-order-by

我有一张桌子,里面有我想要的4件事......名称,价格,数量,以及具体的日期

每个日期有很多条目:

Name          Price  Date

Twin Private  $25    06/02/09
Double        $35    06/02/09
Single        $20    06/02/09
Twin Private  $25    06/03/09
Double        $35    06/03/09
Single        $20    06/03/09
Twin Private  $25    06/04/09
Double        $35    06/04/09
Single        $20    06/04/09
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它压缩成:

Name          Price_06/02/09  Price_06/03/09  Price_06/04/09

Twin Private  $25             $25             $30
Double        $35             $35             $50
Single        $20             $20             $40
Run Code Online (Sandbox Code Playgroud)

Gar*_*ler 7

我想这会做到:

select  Name,
        max(Price_06/02/09) as Price_06/02/09,
        max(Price_06/03/09) as Price_06/03/09,
        max(Price_06/04/09) as Price_06/04/09
from    (
        select    Name,
                  case Date
                      when '06/02/09' then Price
                      else null
                  end as Price_06/02/09,
                  case Date
                      when '06/03/09' then Price
                      else null
                  end as Price_06/03/09,
                  case Date
                      when '06/04/09' then Price
                      else null
                  end as Price_06/04/09
        from      Rates) as Aggregated
group by 
        Name
Run Code Online (Sandbox Code Playgroud)

这有两个阶段,内部查询将数据拉伸出来,所以你最终得到:

Name          Price_06/02/09  Price_06/03/09  Price_06/04/09

Twin Private  $25             null            null
Double        $35             null            null
Single        $20             null            null
Twin Private  null            $25             null
Double        null            $35             null
Single        null            $20             null
Twin Private  null            null            $25
Double        null            null            $35
Single        null            null            $20
Run Code Online (Sandbox Code Playgroud)

然后外部查询按名称分组以将其展平为:

Name          Price_06/02/09  Price_06/03/09  Price_06/04/09

Twin Private  $25             $25             $25
Double        $35             $35             $35
Single        $20             $20             $20
Run Code Online (Sandbox Code Playgroud)