【问题标题】:Count the first occurence of items inside arrays in MySQL JSON table计算 MySQL JSON 表中数组内第一次出现的项目
【发布时间】:2019-12-06 21:24:58
【问题描述】:

我有一个 MySQL 表,其中给定期间的所有公司销售按单位、日期分组,并且在一个数组中,每个销售涉及的所有销售代表 ID 分组。 每个数组中的第一个 sales_rep ID 显示了负责完成每笔销售的销售代表。 我正在尝试详细说明一个查询,该查询返回每个完成销售的销售代表的单位、日期和 sales_rep ID。 如果在给定日期多次显示 sales_rep ID 是可以的。

我的输入:

unit_id   date   unit_sales   sales_reps
427     2019-07-01   3     [["19823508","19823510",""],["23661230","23661227","23411261",""],["23411257","19823508",""]]
466     2019-07-26   2     [["23222763","23222766","26726848","26726849",""],["23222763",""]]

想要的输出是:

unit_id   date      sales_rep
427     2019-07-01  19823508
427     2019-07-01  23661230
427     2019-07-01  23411257
466     2019-07-26  23222763
466     2019-07-26  23222763

【问题讨论】:

  • MySQL 中没有数组数据类型。 sales_reps 列的数据类型是什么?
  • @GMB 对不起,我的错误。是TEXT类型

标签: mysql sql arrays json date


【解决方案1】:

评论太长了。

您应该真的考虑修复您的数据模型。在文本列中存储结构化数据(csv、数组等)会在很多方面给您带来麻烦。通常,您要在此处执行的操作必然会涉及到非常复杂的 SQL。这可以通过采用更适合您的用例的数据模型来避免,例如:

  • 创建一个单独的表来存储每个单位销售中涉及的销售代表列表,并带有一个布尔列,指示哪个销售代表完成了销售;这似乎是正确的方法

  • 或者,作为中间解决方案,将您的文本列转换为 json 列:这不太干净,但至少您可以在访问数据时利用 json 函数

相关阅读:Is storing a delimited list in a database column really that bad?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2014-10-16
    • 2018-05-11
    • 2011-02-08
    • 2011-12-27
    相关资源
    最近更新 更多