当前位置: 首页 > news >正文

计算一列中某个值的个数

忆之独秀 https://blog.csdn.net/lavorange/article/details/25004181
这两天在参加阿里大数据竞赛,进入第二赛季要用到不少的SQL语句,现在才发现当时的数据库是白学了,今天就根据具体的需求来整理一下。可以把需求整理成为一道简单的题目,题目如下:

给定一个表t_alibaba_data:


user_id brand_id type visit_datetime
10944750 13451 0 0604
10944750 13451 2 0604
10944750 13451 2 0723
10944750 13451 0 0801
10944750 13451 0 0515
10944750 13451 0 0703
10944750 13451 0 0629
10944750 13451 0 0814
10944750 21110 0 0422
10944750 1131 0 0713
… … … …
其中:user_id代表用户,brand_id代表品牌,type代表操作的类型(0-点击,1-购买,2-收藏,3-购物车),visit_datetime即用户对品牌行为的时间(0415-0515,0516-0615,0616-0715,0716-0815四个月)。假设一共有10000条交易记录。
现在有这样的需求即:我现在需要对用户user_id对某一个品牌brand_id进行评分grade(可以理解为用户对品牌的喜爱程度),评分grade规则为用户对品牌不同类型type=0,1,2,3的操作总数,然后给这些总数乘以相应的权值grade = w0*count(type=0) + w1*count(type=1) + w2*count(type=2)+w3*count(type=3)。当然考虑到时间的因素,可以对靠后时间的点击操作提高权重,相对距离较远的点击操作降低权重,那么w0*count(type=0)可以改写成

w0*( 1*count(type=0 and 0716<=visit_datatime<=0815) + 0.8*count(type=0 and 0616<=visit_datatime<=0715) +

0.6*count(type=0 and 0516<=visit_datetime<=0615) + 0.4*count(type=0 and 0415<=visit_datetime<=0515)).现在就是要创建一个表user_brand_grade<user_id,brand_id,grade>,按照grade降序排列以便找到前1000个<user_id,brand_id>对。

Step1:首先不考虑时间的因素,首先要找到用户user_id对于某个品牌brand_id某种操作type=0/1/2/3的总次数。

SELECT user_id , brand_id , count(type=0) as type0 ,count(type=1) as type1 , count(type=2) as type2 ,count(type=3) as type3 FROM t_alibaba_data t where visit_datetime >= 415 && visit_datetime <= 715 group by user_id,brand_id;

结果:

当我这么写完之后我发现type0,type1,type2,type3的值都是一样的。这非常不合理,才知道这么写是有问题的。
SQL语句count()的用法:http://www.w3school.com.cn/sql/sql_func_count.asp

可见count只能计算某一列的总数目,或者某一列符合一个条件的总数目,但不能计算某列符合多个条件的相应数目。

Step2:那么修改count成为sum加上type的条件可以做出相应的选择。

SELECT user_id , brand_id , sum(type=0) as type0, sum(type=1) as type1, sum(type=2) as type2, sum(type=3) as type3 FROM t_alibaba_data t where visit_datetime >=515 && visit_datetime <=815 group by user_id ,brand_id;


结果:

SQL语句sum()的用法:http://www.w3school.com.cn/sql/sql_func_sum.asp

sum中是可以加表达式的,因此可以加上type的相应值。

Step3:此时不禁要想,如果当type=0的时候,要根据visit_datetime选择不同的值怎么办?在此要用到case进行条件的选择。那么就可以重写Step2的SQL语句。

SELECT user_id , brand_id , sum(case when type=0 then 1 else 0 end) as type0, sum(case when type=1 then 1 else 0 end) as type1, sum(case when type=2 then 1 else 0 end) as type2, sum(case when type=3 then 1 else 0 end) as type3 FROM t_alibaba_data t group by user_id , brand_id ;


结果(应该和上图相同):


Step4:用case增加时间上的判断:

select * ,(type0+type1+type2+type3) as grade from ( SELECT user_id , brand_id , sum(case when type=0 && visit_datetime >= 801 && visit_datetime<=815 then 10 when type=0 && visit_datetime >= 716 && visit_datetime<=731 then 8 when type=0 && visit_datetime >= 701 && visit_datetime<=715 then 6 when type=0 && visit_datetime >= 616 && visit_datetime<=630 then 4 when type=0 && visit_datetime >= 601 && visit_datetime<=615 then 2 when type=0 && visit_datetime >= 516 && visit_datetime<=531 then 1 else 0 end) as type0, sum(case when type=1 then 1 else 0 end) as type1, sum(case when type=2 then 2 else 0 end) as type2, sum(case when type=3 then 3 else 0 end) as type3 FROM t_alibaba_data t group by user_id , brand_id order by type0 desc )a order by grade desc limit 1000;


然后得到结果:


那么就可以找到符合要求的<user_id,brand_id>对了,即最活跃的用户品牌对。

http://www.jsqmd.com/news/1158028/

相关文章:

  • 成都双流区西航港街道亨得利官方名表服务中心电话公示(2026年7月最新) - 亨得利钟表维修中心
  • 有了大模型,为什么还要智能体?
  • 重庆 CPPM 报名授权(众智商学院)课程中心 - 众智商学院cppm官方
  • 情感AI心理危机干预全链路工程方案:从识别、熔断到人工联动
  • 无像素级透明化:AI视觉引擎穿透盲区,重构园区数字空间 技术白皮书 V1.0
  • 亨得利官方名表服务中心|最新热线和全部维修地址权威信息公示(2026年7月更新) - 亨得利官方博客
  • 猫抓浏览器插件:5步掌握网页资源下载的终极指南
  • 2026年7月弹簧支吊架源头厂家口碑推荐分析,鞍式支座/弹簧支吊架/滑动管托/蛭石隔热管托,弹簧支吊架源头厂家推荐 - 品牌推荐师
  • Java/JVM周刊2026W27 | Spring Boot 3.5.16 终版发布、Quarkus 修复 CVE-2026-50559、Kotlin Toolchain 0.11 Alpha…
  • OAuth2.0 与 SAML 2.0 深度对比:从API授权到企业SSO的5个关键决策点
  • 告别驱动烦恼:UniversalAdbDriver一站式解决Windows安卓设备连接难题
  • 2026湖州正规漏水检测维修权威推荐-卫生间漏水免砸砖维修/厨房阳台墙面暗管漏水检测/屋顶外墙堵漏维修-防水补漏公司实测口碑榜推荐 - 即刻修防水
  • k8s-kubeSphere 20260710
  • 河北 CPPM 报名授权(众智商学院)课程中心 - 众智商学院cppm官方
  • AI Agent风口来袭!2026最新学习路线,助你从零打造智能体系统,成为未来3年最抢手开发者!
  • 芝柏中国官方售后服务中心|地址与官方电话权威信息通知(2026年7月最新) - 亨得利官方服务中心
  • GPT-5.6 明天全量上线,智谱融资 314 亿,Grok 4.5 发布——AI 圈 24 小时三连炸
  • 企业级AI Agent实战:基于Hermes与缰绳工程构建可控智能数据分析助手
  • 分布式 ID 生成方案选型——雪花算法改进与号段模式的工程对比
  • 从编程到AI大师:LLM应用开发工程师进阶路线图(附详细学习路径)
  • CPT外汇:聚焦细节,看看外汇领域风控思路的关键标准
  • 2026必学!掌握AI Agent开发,薪资翻倍,小白也能成大牛!
  • 大麦网抢票神器:Python自动化脚本终极指南,告别黄牛票烦恼
  • 2026年浙江地区激光冷水机优质厂商盘点与推荐 - 品牌鉴赏官2026
  • 2026苏州冰块批发闭眼入推荐!工业降温冰块Top3实测评价 - 热点咨讯
  • 宝玑中国官方售后服务中心|服务热线及办公地址权威信息公告(2026年7月最新) - 亨得利官方服务中心
  • 算法题剖析:找出游戏的获胜者(二)
  • 2026北京靠谱离婚律师TOP5推荐:股权分割、抚养权及财产保全 - 本地品牌推荐
  • Unity集成C++库:用vcpkg+CMake告别插件集成噩梦
  • 萧邦中国官方售后服务中心网点地址与热线实地考察报告+多信源验证(2026年7月更新) - 萧邦中国官方服务中心