【问题标题】:Max match same numbers from each row每行最多匹配相同的数字
【发布时间】:2021-02-10 07:04:17
【问题描述】:

使用下面提到的脚本生成 100 万行报告需要将近 2 天的时间,因此,如果有人可以帮助我使用可以在 10-15 分钟内生成报告的不同脚本,非常感谢。

报告要求如下;

表“cover”包含 500 万行和 6 列数据,同样表“数据”包含 500,000 行和 6 列。

因此,表格封面中的每个行数都必须经过表格日期并提供最大匹配项。

例如,如下表所述,第 1 行可能有 3 个匹配项,第 2 行有 2 个匹配项,第 3 行有 5 个匹配项,因此脚本必须选择最大选择,即第 5 行#3。

Sample table

UPDATE public.cover_sheet AS fc 
  SET maxmatch = (SELECT MAX(tmp.mtch) 
                  FROM (
                    SELECT (SELECT CASE WHEN fc.a=drwo.a THEN 1 ELSE 0 END) + 
                           (SELECT CASE WHEN fc.b=drwo.b THEN 1 ELSE 0 END) + 
                           (SELECT CASE WHEN fc.c=drwo.c THEN 1 ELSE 0 END) + 
                           (SELECT CASE WHEN fc.d=drwo.d THEN 1 ELSE 0 END) +
                           (SELECT CASE WHEN fc.e=drwo.e THEN 1 ELSE 0 END) +
                           (SELECT CASE WHEN fc.f=drwo.f THEN 1 ELSE 0 END) AS mtch 
                    FROM public.data AS drwo
                  ) AS tmp) 
WHERE fc.code>0;

SELECT * 
FROM public.cover_sheet AS fc 
WHERE fc.maxmatch>0;

【问题讨论】:

  • 选择太多!!!什么 DBMS?
  • 完全不清楚这应该做什么。请edit您的问题(通过单击其下方的edit 链接)并添加一些示例数据和基于该数据的预期输出为formatted text。请参阅here,了解有关如何创建漂亮的文本表格的一些提示。 (edit 您的问题 - 不要在 cmets 中输入代码或其他信息)
  • 我已经编辑了这个问题并进行了一些澄清,如果您能提供一个脚本来解决我的要求,请不胜感激

标签: sql postgresql sql-update


【解决方案1】:

正如@a_horse_with_no_name 在对问题的评论中提到的那样,您的问题并不清楚......

看来,您想获取两个表中 6 个字段相等的记录数。

我建议:

  1. 减少select语句的数量,那么查询执行的速度就会提高,
  2. 将您的查询分成几个较小的查询(良好做法),以检查您的逻辑,
  3. 使用join获取相等的数据,见:Visual Representation of SQL Joins
  4. 使用子查询或cte 获取您可以更新表的结果。

我想你想得到如下结果:

SELECT COUNT(*) mtch
FROM public.cover_sheet AS fc INNER JOIN public.data AS drwo ON 
    fc.a=drwo.a AND fc.b=drwo.b AND fc.c=drwo.c AND fc.d=drwo.d AND fc.e=drwo.e AND fc.f=drwo.f

如果我没记错并且上面的查询是正确的,上面查询的执行时间会减少到1-2分钟左右。

最后,更新查询可能如下所示:

WITH qry AS
(
    -- proper select statement here
)
UPDATE public.cover_sheet AS fc 
    SET maxmatch = qry.<fieldname>
FROM qry
WHERE fc.code>0 AND fc.<key> = qry.<key>;

注意:

我没有看到您的数据,我对它的结构、关系等一无所知。因此,您必须根据需要更改上述查询。


【讨论】:

  • 感谢您的回复,我已经编辑了问题并进行了一些澄清,如果您能提供一个脚本来解决我的要求,请不胜感激
猜你喜欢
  • 2020-12-27
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
相关资源
最近更新 更多