【问题标题】:Is it possible to do a group_concat inside another group_concat?是否可以在另一个 group_concat 中做一个 group_concat?
【发布时间】:2019-01-12 12:12:27
【问题描述】:

我正在建立一个卖鞋的网上商店。我正在尝试编写一个命令,该命令将显示 1 个特定运动鞋的每种尺寸的数量。

这是我的 ER 图

Link to my ER-Diagram can be seen here: imgur.com/a/QHpid2p

我想将数量(数量)添加到所有不同的尺寸,但我尝试的一切似乎都不起作用。

SELECT sn.sneaker_id, sn.sneaker_name,
       (CASE WHEN sn.gender = 0 THEN 'Women'
             WHEN sn.gender = 1 THEN 'Men'
        END) as gender,
       sn.description, sn.price,
       GROUP_CONCAT(si.size),
       GROUP_CONCAT(DISTINCT(i.path)),
       bn.brand_name
FROM sneakers sn JOIN
     sizes si
     ON si.sneaker_fk = sn.sneaker_id JOIN
     images i
     ON i.sneaker_fk = sn.sneaker_id JOIN
     brand_names bn
     ON bn.brand_name_id = sn.brand_name_fk
WHERE sn.sneaker_id = 1

这是我的实际结果:

sneaker_id : 1
sneaker_name : Air Max 97 Silver Bullet
gender : Men
description : anfaslknsaf
price : 1500
GROUP_CONCAT(sizes.size) : 41.0,43.0,44.0,45.5,46.0
GROUP_CONCAT(DISTINCT(images.path)): img
brand_name : nike

我想要的输出是这样的:

sneaker_id : 1
sneaker_name : Air Max 97 Silver Bullet
gender : Men
description : anfaslknsaf
price : 1500
GROUP_CONCAT(sizes.size) : [41.0, 10],[43.0, 5],[44.0, 8],[45.5, 7],[46.0,8]
GROUP_CONCAT(DISTINCT(images.path)): img
brand_name : nike

【问题讨论】:

    标签: mysql sql group-concat


    【解决方案1】:

    GROUP BY 查询中按所有未聚合的列进行聚合是一种很好的做法。

    GROUP_CONCAT() 接受多个参数并将它们连接在一起。所以,你可以这样做:

    SELECT sn.sneaker_id, sn.sneaker_name,
           (CASE WHEN sn.gender = 0 THEN 'Women'
                 WHEN sn.gender = 1 THEN 'Men'
            END) as gender,
           sn.description, sn.price,
           GROUP_CONCAT('[', si.size, ', ', si.qty, ']'),
           GROUP_CONCAT(DISTINCT(i.path)),
           bn.brand_name
    FROM sneakers sn JOIN
         sizes si
         ON si.sneaker_fk = sn.sneaker_id JOIN
         images i
         ON i.sneaker_fk = sn.sneaker_id JOIN
         brand_names bn
         ON bn.brand_name_id = sn.brand_name_fk
    WHERE sn.sneaker_id = 1
    GROUP BY sn.sneaker_id, sn.sneaker_name, gender, sn.description, sn.price, bn.brand_name;
    

    请注意,您可以删除 WHERE 子句,这将适用于所有运动鞋 ID。

    【讨论】:

      【解决方案2】:

      您需要手动连接两列:

      GROUP_CONCAT(CONCAT('[', sizes.size, ', ', sizes.qty, ']'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 2012-05-07
        • 2013-11-30
        • 2014-10-18
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多