SQL查询划分字段

时间:2018-12-06 07:49:08

标签: mysql sql

database example

我想在这里通过代码标识的每个广告,获取与他相关联的账单数量(法语:制造)。

例如,在这里,对于数据库的这一部分,我想要具有以下内容:R08:22; R087:19; R11:3; R00:3; R062:1; R026:1;

商业代码以“ R”开头,后跟几个数字,如果账单与多个商业广告相关联,则“ |”分隔代码。顺便说一下,大多数账单只与一个商业广告有关。

我的问题是仅使用SQL来做到这一点。 如果过于复杂,我将使用PHP。

我希望我的问题是可以理解的,并且您会知道如何帮助我。

另一个数据示例:

R015        15040205
R012        14250123
R012|R038   14250123
R015|R012   14250123
R005        14250123

我想返回一个查询:

R005        1
R038        1
R015        2
R012        3

实际上,我想要一个查询,它计算每个代码的出现次数。 第二个数据无关紧要

1 个答案:

答案 0 :(得分:1)

如果您最多有两个代码(如示例数据中所示),则可以使用substring_index()

select code, count(*)
from ((select substring_index(code_commercial, '|', 1) as code
       from t
      ) union all
      (select substring_index(code_commercial, '|', -1)
       from t
       where code_commercial like '%|%'
      )
     ) c
group by code;

更重要的一点是,您的数据模型确实非常非常糟糕。您应该修复它。 SQL并非设计为在单个列中存储多个值,也不设计为使用字符串来存储此类数据。

您需要一个联结表,每个代码具有单独的行。这样您的查询将更易于编写和运行。