计算不同值的出现而不分组?
Posted
技术标签:
【中文标题】计算不同值的出现而不分组?【英文标题】:Count occurence of distinct value without grouping? 【发布时间】:2020-04-28 14:28:05 【问题描述】:我需要逐行提取而不对所有 clientID 进行分组,见下文。
我正在编写一个快速摘要,以了解我们的客户预订产品的次数,以便我们了解他们的第二次、第三次或第四次预订。
select c.clientid, c.bookref, left(c.tourno, 6) as tourref, c.book_date
from cust c
where c.book_date between '2018-01-01' and ' 2020-01-01'
order by clientid asc, book_date asc
这是非常基本的 SQL,每次预订都会生成一行结果。我需要做的是计算ClientID出现的次数,并通过“clientid asc,book_date asc”对表格进行排序,我应该能够得出一长串预订以及每行对应的预订号.
不幸的是,我看到的所有帮助示例基本上都将 ID 列分组,所以我可以看到 ID“255253”的计数为 7(因此有 7 个预订),但不知道这些预订是什么。
谢谢!顺便说一句,我正在使用 Advantage SQL。
我认为最好的解释方法是,假设您在 Excel 的 A 列中有一个按日期顺序排列的 clientID 升序列表,然后将此公式应用于单元格 B2:
=IF(A2=A1,B1+1,1)
【问题讨论】:
【参考方案1】:你可以使用窗口函数:
select c.clientid, c.bookref, left(c.tourno, 6) as tourref, c.book_date,
count(*) over (partition by c.clientid) as client_cnt
from cust c
where c.book_date between '2018-01-01' and '2020-01-01'
order by clientid asc, book_date asc;
AdvantageSQL 可能不支持这些。您也许可以将您想要的东西连接在一起:
select c.clientid, count(*) as client_cnt,
group_concat(c.bookref order by book_date)
from cust c
where c.book_date between '2018-01-01' and '2020-01-01'
group by clientid asc;
【讨论】:
嗨 Gordon,你说得对,我认为 Advantage 不支持 Window 函数,我收到一条错误消息,指出:poQuery: Error 7200: AQE Error: State = 42000;本机错误 = 2115; [iAnywhere 解决方案][Advantage SQL 引擎]未找到预期的词法元素:FROM 您在 SELECT 语句中的列定义之后缺少关键字 FROM。 -- SQL语句中的错误位置是:95(行:2列:22)【参考方案2】:select c.clientid, c.bookref, left(c.tourno, 6) as tourref, c.book_date, c2.number_of_bookings
from cust c
inner join (select clientid, count(*) AS number_of_bookings from cust
where book_date between '2018-01-01' and '2020-01-01'
group by clientid) c2
on c.clientid = c2.clientid
order by c.clientid asc, c.book_date asc
我会将同一张表加入到自身中。
【讨论】:
嗨彼得,谢谢你,它工作得很好。还有一件事,所以这正确地显示了出现的数量,但它没有显示一个上升的数字来显示每组 clientID 的预订。这么说吧,假设我们有 ClientID 6 和 Client 7,6 有两个预订,7 有三个。我想在每个客户的行旁边看到一个 1 和 2,所以他们的第一个预订是“1”,他们的第二个是“2” - 同样对于客户 7,他们各自都有一个 1、2 和 3线。希望这是有道理的。 实际上,抱歉,将其与提取的计数进行比较会产生 95% 的准确度。不幸的是,我认为您的加入是将 clientID 的计数与整个数据库进行比较,而不是时间范围。以上是关于计算不同值的出现而不分组?的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用cph函数和rcs函数构建限制性立方样条cox回归模型使用rms包的Predict函数计算指定连续变量在不同分组变量下和风险比HR值的关系使用ggplot2可视化变量与风险值HR的关系
当通过R中的不同变量进行分组和汇总时,计算分类变量的出现次数