首页 > 解决方案 > 计算 MySQL JSON 表中数组内第一次出现的项目

问题描述

我有一个 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

标签: mysqlsqlarraysjsondate

解决方案


评论太长了。

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

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

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

相关阅读:在数据库列中存储分隔列表真的那么糟糕吗?


推荐阅读