如何查询以在一次查询中捕获新近度和规模?

Posted

技术标签:

【中文标题】如何查询以在一次查询中捕获新近度和规模?【英文标题】:How to query to capture recency and scale in one query? 【发布时间】:2020-02-17 16:41:52 【问题描述】:

我已经构建了一个查询,它根据 url_count 从表中计算 id 的数量。

with cte as (
  select id, count(distinct.url) url_count
  from table
  group by id
)

select sum(if(url_count >= 1,1,0) scale
from cte
union all
select sum(if(url_count >= 2,1,0) scale
from cte
union all
select sum(if(url_count >= 3,1,0) scale
from cte
union all
select sum(if(url_count >= 4,1,0) scale
from cte
union all
select sum(if(url_count >= 5,1,0) scale
from cte

上面的查询说; "给我id的列表和他们各自去的url数量,然后累计去[1-5]个或更多url的id数量"

这是一种乏味的方法,但可以工作并输出类似的东西;

---------
| scale |
---------
|1213432|
|867554 |
|523523 |
|342232 |
|145889 |
---------

从这个表中,我还有一个最近 5 天的日期字段,我正在努力将其添加到这个查询中。挑战就在于此;尝试在查询中添加第二层信息;即新近度。一直在研究多种方法来构建查询,根据日期输出不同比例的所有组合。

我想象的那种输出是一个数据透视表,它呈现出类似的东西;

-------------------------------------------------------------
|   date   | url_co1 | url_co2 | url_co3 | url_co4 | url_co5|
-------------------------------------------------------------
|2020-01-05| 1213432 | 1112321 | 984332  | 632131  | 234124 |
|2020-01-04| 1012131 |  934242 | 867554  | 533242  | 134234 |
|    ...   |   ...   |   ...   |   ...   |   ...   |   ...  |
|    ...   |   ...   |   ...   |   ...   |   ...   |   ...  |
|    ...   |   ...   |   ...   |   ...   |   ...   |   ...  |
-------------------------------------------------------------

其中 url_co[1-5] 表示访问 [1-5] 或更多 url 的 id 数量,而 dates 则放弃捕获量的日期。不知道怎么写,因为一旦我查询:

with cte as (
  select id, date, count(distinct.url) url_count
  from table
  group by id, date
)

我已汇总到每个 id、每个日期,因此出现了问题。 =/

希望一切都有意义!

请,请帮助!我将不胜感激。

必须有一种方法来获取我错过的每个新近度的音量组合!

【问题讨论】:

【参考方案1】:

我并没有真正关注完整的问题,但第一个查询可以简化为:

select url_count, count(*) as this_count,
       sum(url_count) over (order by url_count desc) as descending_count
from (select id, count(distinct url) as url_count
      from table
      group by id
     ) t
group by url_count
order by url_count;

【讨论】:

抱歉,这根本没有帮助。

以上是关于如何查询以在一次查询中捕获新近度和规模?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Gremlin 在一次查询中同时获取节点属性和边名?

VB6 - 如何在一次调用中执行多个SQL查询

MsSQL如何在一次查询中从给定的日期和仓库号获取最近的未来值和值的总和

CakePHP 3:如何在一次查询中统计和检索不同时期的数据?

PDO lastInsertID() 由于在一次调用中运行多个查询而失败

在一次查询中获取所有国家/地区的州和城市