是否可以在另一个 group_concat 中做一个 group_concat?
Is it possible to do a group_concat inside another group_concat?
我正在建立一个销售鞋子的网上商店。我正在尝试编写一个命令来显示 1 个特定运动鞋的每个尺寸的数量。
这是我的 ER 图
Link to my ER-Diagram can be seen here: imgur.com/a/QHpid2p
我想将数量 (qty) 添加到所有不同的尺寸,但我尝试的一切似乎都不起作用。
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
您需要手动连接两列:
GROUP_CONCAT(CONCAT('[', sizes.size, ', ', sizes.qty, ']'))
按 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。
我正在建立一个销售鞋子的网上商店。我正在尝试编写一个命令来显示 1 个特定运动鞋的每个尺寸的数量。
这是我的 ER 图
Link to my ER-Diagram can be seen here: imgur.com/a/QHpid2p
我想将数量 (qty) 添加到所有不同的尺寸,但我尝试的一切似乎都不起作用。
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
您需要手动连接两列:
GROUP_CONCAT(CONCAT('[', sizes.size, ', ', sizes.qty, ']'))
按 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。