栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

需要SQL优化(也许是DISTINCT ON的原因吗?)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

需要SQL优化(也许是DISTINCT ON的原因吗?)

如果anchor_id和id可以存储在元组数组中,那也很好。

多维数组的聚集函数

我想您为此创建了一个 二维数组 。这比起来更容易处理

ARRAY ofrecord
。Standard
array_agg()
无法聚合多维数组。但是您可以为此轻松地编写自己的聚合函数:

CREATE AGGREGATE array_agg_mult (anyarray)  (    SFUNC     = array_cat   ,STYPE     = anyarray   ,INITCOND  = '{}');

对于出现多次的数组中的每个anchor_id:保留一个随机数,然后删除所有其他。这还意味着从每个已删除的anchor_id的ID数组中删除相应的ID

询问

SELECt DISTINCT ON (p)       p, groundtruth, array_agg_mult(ARRAY[ARRAY[anchor_id, id]]) AS idsFROM (   SELECt DISTINCT ON (ps.p, m.groundtruth, m.anchor_id)          ps.p, m.groundtruth, m.anchor_id, m.id   FROM  (SELECT unnest(point_array) AS p) AS ps   JOIN   measurement m ON ST_DWithin(ps.p, m.groundtruth, distance)   ORDER  BY ps.p, m.groundtruth, m.anchor_id, random()   ) xGROUP  BY p, groundtruthORDER  BY p, random();
  • 子查询每个

    x
    都不同,如果有多个同级,则选择一个随机行。这样,连接保持完整。
    anchor_id``(p, groundtruth)``anchor_id - id

  • 外部查询聚合您想要的二维数组,按排序

    anchor_id
    。如果要
    anchor_id
    随机订购,请再次使用随机:

    array_agg_mult(ARRAY[ARRAY[anchor_id, id]] ORDER BY random())
  • 最后,每个人

    DISTINCT ON
    只能随机选择1
    groundtruth
    p



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464481.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号