sql - 用于运行不同计数和运行条件计数的 Vertica SQL
问题描述
我正在尝试基于更深的产品 url 级别分数表构建部门级别分数表。
日期不连续
并非所有网址都在同一天获得分数更新(彼此独立)
dist_url 应该是运行计数不同(累积计数不同)
dist urls 和 urls score >=30 都是不同的
我现在拥有的是:
Date url Store Dept Page Score
10/1 a US A X 10
10/1 b US A X 30
10/1 c US A X 60
10/4 a US A X 20
10/4 d US A X 60
10/6 b US A X 22
10/9 a US A X 40
10/9 e US A X 10
Date Store Dept Page dist urls urls score >=30
10/1 US A X 3 2
10/4 US A X 4 3
10/6 US A X 4 2
10/9 US A X 5 2
我认为 dist_url 可以通过使用窗口函数来完成,只是不确定查询。
当前查询如下,但它是错误的,因为不是累积计数不同:
SELECT
bm.AnalysisDate,
su.SoID AS Store,
su.DptCaID AS DTID,
su.PageTypeID AS PTID,
COUNT(DISTINCT bm.SeoURLID) AS NumURLsWithDupScore,
SUM(CASE WHEN bm.DuplicationScore > 30 THEN 1 ELSE 0 END) AS Over30Count
FROM csn_seo.tblBotifyMetrics bm
INNER JOIN csn_seo.tblSEOURLs su
ON bm.SeoURLID = su.ID
WHERE su.DptCaID IS NOT NULL
AND su.DptCaID <> 0
AND su.PageTypeID IS NOT NULL
AND su.PageTypeID <> -1
AND bm.iscompliant = 1
GROUP BY bm.AnalysisDate, su.SoID, su.DptCaID, su.PageTypeID;
如果有人有任何想法,请告诉我。
解决方案
根据您的问题,您似乎需要两个层次的逻辑:
select date, store, dept,
sum(sum(start)) over (partition by dept, page order by date) as distinct_urls,
sum(sum(start_30)) over (partition by dept, page order by date) as distinct_urls_30
from ((select store, dept, page, url, min(date) as date, 1 as start, 0 as start_30
from t
group by store, dept, page, url
) union all
(select store, dept, page, url, min(date) as date, 0, 1
from t
where score >= 30
group by store, dept, page, url
)
) t
group by date, store, dept, page;
我不明白您的查询与您的问题有何关系。
推荐阅读
- react-native - 由于任务':react-native-image-picker:testDebugUnitTest'的执行失败,无法制作Azure持续集成构建管道
- apache-spark - 这个用例是否适合 Apache Spark?
- vba - 在 VBA 中抑制 PDF 转换错误消息
- c# - 由于 Microsoft.Toolkit.Uwp.UI.dll 上的错误,Uno 平台中的 WebAssembly 无法编译
- vue.js - 如何使用 Vue.js 跟踪谷歌分析活动
- javascript - React-Redux:如何从数组中添加每个项目
- powershell - 我们如何重新制作程序以运行并将新值保存在 c.csv 文件中?
- python - 乘法布尔矩阵
- typescript - 在打字稿项目中使用别名的问题
- python - 无法使用 DefaultAzureCredential 创建 DataFactoryManagementClient()?