按子句处理逗号分隔值

时间:2019-01-22 11:13:02

标签: mysql mysqli

我有一个名为std::vector的列,其中包含三种值purchasetypenewtrialnew,trial中的另一列
我正在根据noofsales
计算总数 我正在使用的查询是

purchasetype

此查询为我提供了三种求和结果 Select SUM(noofsales) From table GroupBy purchasetype newtrial
我只希望new,trialnew中的总和是只有一条记录包含trial的情况,然后new,trial的计数应该增加,而new的计数应该增加< br /> 我尝试使用像

这样的substring_index函数
trial

但这只是针对逗号分隔值中的第一条记录进行汇总。

2 个答案:

答案 0 :(得分:0)

根据您的情况,您可以对每个金额使用CASE / WHEN语句。例如:

SELECT query with CASE condition and SUM()

答案 1 :(得分:0)

您可以动态创建一个数字表,并使用它来将purchase_type是逗号分隔的值的记录转换为新行。然后,在外部查询中,您可以正确聚合。

考虑以下查询,您可以在this db fiddle中看到该查询。它将动态发现可用的购买类型并生成您期望的结果:

SELECT x.purchase_type, SUM(x.noofsale)
FROM (
    SELECT
        t.noofsale,
        SUBSTRING_INDEX(SUBSTRING_INDEX(t.purchase_type, ',', numbers.n), ',', -1) purchase_type
    FROM
        (SELECT 1 n UNION SELECT 2) numbers 
        INNER JOIN t ON CHAR_LENGTH(t.purchase_type) - CHAR_LENGTH(REPLACE(t.purchase_type, ',', ''))>= numbers.n-1
) x
GROUP BY x.purchase_type
ORDER BY 1,2

NB:此查询最多支持两个逗号分隔的值(如示例数据中所示);如果您期望的更多,则可以改编numbers子查询:

(SELECT 1 n UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 ...)