如何在子查询中按 sql 数据分组以显示演变
how to group by sql data in a sub-query to show evolution
我有我的 sqlite 数据库,其中包含 url 和每周访问的次数。它是这样存储的:
uid, url, date, nb_visits,...
我想获得每个 URL 随着按日期分组的访问次数的演变。
看起来像的东西:
"my_url_1","45,54,76,36,78"
这里我的假设是数据库中存储了 5 个日期,不需要日期,只希望它们从旧到新排序
我尝试过类似的方法,但在第二个 select
中不接受 2 个字段
select url, visits,
(select sum(visits) from data d2 where d2.url=d1.url group by date) as evol
from data d1
where date = (select max(date) from data);
此查询无效只是想分享我正在尝试做的事情
感谢帮助
您在寻找 group_concat()
吗?
select url, group_concat(visits)
from (select d.*
from data d
order by url, date
) d
group by url;
注意:SQLite 不支持 order by
作为 group_concat()
语法的一部分。理论上,子查询中的排序应该具有对日期进行排序的预期效果。
你想要的是每个url的GROUP_CONCAT()
的结果。
聚合函数 GROUP_CONCAT()
的问题是它不支持 ORDER BY
子句,您需要按日期对访问进行排序,因此不能保证您得到的结果是正确的。
在 SQLite 中还有一个 GROUP_CONCAT()
window 函数,它支持 ORDER BY
子句,可用于 return 您想要的结果:
SELECT DISTINCT url,
GROUP_CONCAT(visits) OVER (
PARTITION BY url
ORDER BY date
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) visits
FROM data
查看简化版 demo.
我有我的 sqlite 数据库,其中包含 url 和每周访问的次数。它是这样存储的:
uid, url, date, nb_visits,...
我想获得每个 URL 随着按日期分组的访问次数的演变。 看起来像的东西:
"my_url_1","45,54,76,36,78"
这里我的假设是数据库中存储了 5 个日期,不需要日期,只希望它们从旧到新排序 我尝试过类似的方法,但在第二个 select
中不接受 2 个字段select url, visits,
(select sum(visits) from data d2 where d2.url=d1.url group by date) as evol
from data d1
where date = (select max(date) from data);
此查询无效只是想分享我正在尝试做的事情 感谢帮助
您在寻找 group_concat()
吗?
select url, group_concat(visits)
from (select d.*
from data d
order by url, date
) d
group by url;
注意:SQLite 不支持 order by
作为 group_concat()
语法的一部分。理论上,子查询中的排序应该具有对日期进行排序的预期效果。
你想要的是每个url的GROUP_CONCAT()
的结果。
聚合函数 GROUP_CONCAT()
的问题是它不支持 ORDER BY
子句,您需要按日期对访问进行排序,因此不能保证您得到的结果是正确的。
在 SQLite 中还有一个 GROUP_CONCAT()
window 函数,它支持 ORDER BY
子句,可用于 return 您想要的结果:
SELECT DISTINCT url,
GROUP_CONCAT(visits) OVER (
PARTITION BY url
ORDER BY date
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) visits
FROM data
查看简化版 demo.