【问题标题】:Aggregating rows into a single new row, plus data from other table将行聚合成一个新行,加上其他表中的数据
【发布时间】:2011-03-11 15:46:58
【问题描述】:

我们在这个查询中有两个感兴趣的表。

首先,我们有一个音乐曲目表,每个曲目都有一个独特的 PK 和一个指向曲目所属专辑的 FK。第二个表是这张专辑表。

所以我们每 1 行专辑大约有 10 行曲目。

我正在尝试将属于一张专辑的所有曲目汇总到一行中,再加上专辑标题(保存在专辑中)。这是为了避免繁琐的 PHP 代码。

目前我们有:

SELECT Album.Image_URL, Track.Track_Title, Track.Price
FROM Album, Track, Artist
WHERE (Album.Album_ID=Track.Album_ID) AND (Artist.Artist_ID=Track.Artist_ID)
ORDER BY Album.Album_Name ASC

这是每行一首曲目,每首曲目都有正确的专辑信息。不过我希望这张专辑的曲目排成一排。

感谢任何帮助, 一个

【问题讨论】:

  • 问题在于轨道的数量会有所不同,因此您无法提前知道结果集应该返回多少列。如果您愿意接受最大曲目数为 10,则可以进行一个丑陋的查询,该查询将返回 10 首曲目,如果给定专辑少于 10 首曲目,其中一些可能为 NULL。但是您也可以只为每个专辑/曲目组合返回一行,然后通过遍历返回的行来构建您的数据。
  • 你能回答这个问题吗?然后可以标记为已回答... :)

标签: mysql


【解决方案1】:

问题在于轨道的数量会有所不同,因此您无法提前知道结果集应该返回多少列。

如果您愿意接受最大曲目数为 10,则可以进行丑陋的查询,返回 10 首曲目,如果给定专辑少于 10 首曲目,其中一些可能为 NULL .

但您也可以只为每个专辑/曲目组合返回一行,然后通过遍历返回的行来构建您的数据。

干杯,

丹尼尔

【讨论】:

    【解决方案2】:

    你需要添加的基本上就是GROUP BY Albums.Album_ID:

    SELECT Album.Image_URL, Album.Album_Name, SUM(Track.Price) As total_price
    FROM Album
    JOIN Track ON Album.Album_ID=Track.Album_ID
    JOIN Artist ON Artist.Artist_ID=Track.Artist_ID
    GROUP BY Albums.Album_ID
    ORDER BY Album.Album_Name ASC
    

    【讨论】:

    • 立即尝试 - 更改为 JOIN 语法。价格列是整数还是文本?如果是文本,则 SUM 将不起作用。
    【解决方案3】:

    我认为您需要 GROUP_CONCAT() 选项。所以,对于一个键,分组为逗号分隔列表,所有另一个......类似

    select 
          Album.ID,  (assuming this column name since not provided)
          Album.Title,
          Album.Image_URL,
          Group_CONCAT( Track.Track_Title ) All_Tracks
      from 
          Album
             join Tracks
                on Album.Album_ID=Track.Album_ID
                join Artist
                   onTrack.Artist_ID = Artist.Artist_ID
      group by
          1
    

    如果您想为每个曲目标题定价,只需将其作为 GROUP_CONCAT() 的一部分进行广告...无法确认语法,但类似

    TRIM( Track.Track_Title + " (" + Track.Price + ")" ) 所以连接可能类似​​于

    Album ID   Title       Image Url   AllTracks
    1          Some Album  Some URL    First Track ($.99), Second Track, ($1.29), Third Track...
    

    但是,艺术家不是真的与专辑相关联,而不是与曲目相关联吗?或者您对Song Writer信息感兴趣...您可能需要相应调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多