首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在另一个group_concat中执行group_concat?

是否可以在另一个group_concat中执行group_concat?
EN

Stack Overflow用户
提问于 2019-01-12 20:12:27
回答 2查看 31关注 0票数 0

我正在建一个卖鞋的网店。我正在试着写一个命令,将显示每个尺寸的数量为1个特定的运动鞋。

这是我的ER图

代码语言:javascript
复制
Link to my ER-Diagram can be seen here: imgur.com/a/QHpid2p

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

代码语言:javascript
复制
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

这是我的实际结果:

代码语言:javascript
复制
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

我想要的输出是这样的:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-12 20:22:39

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

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

代码语言:javascript
复制
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子句,这将适用于所有运动鞋ids。

票数 0
EN

Stack Overflow用户

发布于 2019-01-12 20:20:50

您需要手动连接这两列:

代码语言:javascript
复制
GROUP_CONCAT(CONCAT('[', sizes.size, ', ', sizes.qty, ']'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54159456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档