当我学习SQL的时候,我发现了一些很好的游戏来教你。我被困在“迷失在SQL”游戏的“搜索”转换中。
任何人都能解决这个案子?我被困了好几天,在这个问题上绞尽脑汁。
真的很感激更高级的人向我展示代码,这样我就可以在iT上分析和学习:)
https://lost-at-sql.therobinlord.com/challenge-page/search
返回一个包含“path”、“diff_total_clicks”和“diff_unique_keywords”列的表。
对于每个路径,该表应显示最近2天与前2天之间的点击量和唯一关键字的差异。
按点击次数的变化对数据进行降序排序。
我想我做错了我的加入
这是我走得最远的地方
SELECT
S.path,
coalesce(sum(clicks) - XDtotal_clicks, sum(clicks)) as diff_total_clicks,
coalesce(Count(distinct query) - XDunique_query,Count(distinct query)) as diff_unique_keywords
from
search_data as S
LEFT JOIN (
SELECT
path,
sum(clicks) as XDtotal_clicks,
Count(distinct query) as XDunique_query
from
search_data
where
pt < '2022-04-31'
and pt > '2022-04-29'
GROUP BY
path
) as XD on XD.path = S.path
where
pt > '2022-04-31'
GROUP BY
S.path
字符串
2条答案
按热度按时间kx5bkwkv1#
字符串
jgovgodb2#
每个路径都有一个最近的日期:
字符串
您应该选择每个路径的最大日期和前一天的数据并将其聚合。然后您应该对前两天进行同样的操作,然后比较结果。
因此,对于每个路径,我们需要路径的最大日期为4天。我们可以通过如上所示的聚合查询或窗口函数
MAX(pt) OVER (PARTITION BY path)
来获取它。型
由于不了解表,我使用了与您相同的列。我希望查询足够直观。在聚合函数调用中使用
CASE
表达式被称为“条件聚合”。它可以帮助两个人同时处理不同的聚合(前两天与前两天)。我的查询没有通过测试。我试过了,得到错误消息:
结果缺少1个预期行。
结果中有1个不正确的行。
我不明白为什么会缺少一行。我按路径分组,并选择每个路径的pt大于或等于其最大pt减去三天的所有行。因此,每个路径至少应该有一个最大pt行。一定是SQLite的奇怪日期/在没有正确的数据类型或类似的东西的情况下,时间处理。不幸的是,我在那个站点上没有看到表定义。我们看到了所选的数据和预期的数据,以便得出结论。也许一个SQLite pro可以在这里有所帮助。