使用带有用户定义条件的 Count 从 sql 生成频率表
Posted
技术标签:
【中文标题】使用带有用户定义条件的 Count 从 sql 生成频率表【英文标题】:Generate frequency table from sql using Count with user defined condition 【发布时间】:2019-07-12 21:32:37 【问题描述】:基本上我需要使用sql生成一个频率表,我有一个这样的示例表:
user_id user_label code1 date
------ ----------- ----- ------
1 x a 01-01
1 x a 01-01
1 x a 01-02
1 x b 01-01
1 x c 01-02
1 y a 01-01
2 x a 01-01
等
计算出现次数的规则是如果两行有相同的user_id、user_label和date,那么重复的代码应该只计算一次。
例如,对于前两行,频率表应该是:
user_id user_label code1 count_code_1
-------- ----------- ----- ------------
1 x a 1
因为即使 a 有两个实例,但它们发生在同一日期,所以应该只计算一次,我需要对 code_1 列中的每个唯一代码执行此操作 对于 user_id + user_label 的所有组合
处理完第三行,频率表应该是:
user_id user_label code_1 count_code_1
-------- ----------- ------ ------------
1 x a 2
虽然是相同的代码('a'),但它发生在不同的日期(01-02) 最后,对于上面给出的示例表,期望的结果应该是
user_id user_label code_1 count_code_1
-------- ----------- ------ -------------
1 x a 2
1 x b 1
1 x c 1
1 y a 1
2 x a 1
到目前为止我所拥有的是
select t.user_id, t.user_label, t.code_1, count(###)
from t
group by t.code_1,t.user_id, t.user_label
问题是 1. 我不知道在 count 中放什么 2. 我不知道如何将日期条件合并到这个查询中。
任何建议,更正将不胜感激。
【问题讨论】:
【参考方案1】:你似乎想要count(distinct date)
:
select t.user_id, t.user_label, t.code_1,
count(distinct date)
from t
group by t.code_1,t.user_id, t.user_label
【讨论】:
以上是关于使用带有用户定义条件的 Count 从 sql 生成频率表的主要内容,如果未能解决你的问题,请参考以下文章