【问题标题】:PostgreSQL distinct on, group by, having in one?PostgreSQL 不同,分组依据,合二为一?
【发布时间】:2011-06-15 14:07:58
【问题描述】:

我在使用 PostgreSQL 查询时遇到了一些问题

我想要的是一个“活动”列表,按距离排序,并且在距某个位置 [in_lat, in_lng, in_radius] 的最小距离内 现在,我正在检索距离(使用 distance_in_km(...) )两次。一次用于订购,一次用于检查广告系列是否在我的首选范围内。

此外,一个活动可能有多个“活动接收者”条目(接收类型 [EMAIL、WEBSITE 等...])

我只想检索一次广告系列。因此 DISTINCT ON。

所以问题是,我怎样才能让“WHERE distance

非常感谢任何帮助!!!

    SELECT DISTINCT ON (c.campaign_uuid, distance)
            c.campaign_uuid,
            prl.lat,
            prl.long,
            distance_in_km(prl.lat, prl.long, in_lat, in_lng) AS distance                
        FROM 
            usercampaignrelations AS ucr
        LEFT JOIN
            campaignreceivers AS cr
        ON
            ucr.usercampaign_uuid = cr.usercampaign_uuid
        LEFT JOIN
            campaigntargetgrouprelations AS ctg
        ON
            cr.campaigntargetgroup_uuid = ctg.campaigntargetgroup_uuid
        LEFT JOIN
            campaigns AS c
        ON
            ucr.campaign_uuid = c.campaign_uuid
        LEFT JOIN
            companycampaignrelations AS cc
        ON
            c.campaign_uuid = cc.campaign_uuid
        LEFT JOIN
            pointradiuslocations AS prl
        ON
            c.location_uuid = prl.location_uuid
        WHERE 
            ucr.user_uuid = in_user_uuid
        AND
            (cr.status = 'SENT' OR cr.status = 'RETRIEVED')
        AND
            distance_in_km(prl.lat, prl.long, in_latitude, in_longtitude) < in_radius
        ORDER BY
            distance
        LIMIT 
            in_limit

【问题讨论】:

    标签: sql database postgresql group-by distinct-on


    【解决方案1】:

    AFAIK,distance_in_km() 只会被调用一次(每行),只要你使用相同的参数,因此 WHERE 和 ORDER BY 不会再次评估它。

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多