a1是产品销量表,a2是渠道表,a1和a2通过渠道ID关联
具体SQL如下:
-- 3.根据逗号截取前3个渠道
SELECT
product_id,
SUBSTRING_INDEX( channel, ',', 3 ) AS channel
FROM
(
-- 2.根据产品分组,用GROUP_CONCAT拼接渠道,此处的渠道就是根据销量降序排列的数据了
SELECT
product_id,
GROUP_CONCAT(
DISTINCT ( Channel_Group )) AS channel
FROM
(
-- 1.获取每个渠道每个产品的销量之和,且根据销量降序排列
SELECT
a1.产品 ID,
a2.渠道名,
SUM( a1.销量 ) AS product_quantity_all
FROM
a1
LEFT JOIN a2 ON a1.渠道 ID = a2.渠道 ID
GROUP BY
a1.产品 ID,
a2.渠道 ID
ORDER BY
a1.产品 ID,
product_quantity_all DESC
) AS a
GROUP BY
product_id
) AS b
简单的说就是先 GROUP BY,然后 ORDER BY 字段 DESC
然后 GROUP_CONCAT(DISTINCT())
然后再 SUBSTRING_INDEX(字段,‘,’,3)