Live2D

sql小技巧

传统sql,计算同时安装 百度和微信的人数

select count() from (
select distinct devicenumber from zb_zhw_gx_bi_app.dws_m_cus_label_user_app_info where appcode = 'baidu'
INTERSECT
select distinct devicenumber from zb_zhw_gx_bi_app.dws_m_cus_label_user_app_info where appcode = 'weixin'
);

优化后sql

SELECT COUNT(*) FROM (
  SELECT a.devicenumber
  FROM dws_m_cus_label_user_app_info a
  INNER JOIN dws_m_cus_label_user_app_info b ON a.devicenumber = b.devicenumber
  WHERE a.appcode = 'baidu' AND b.appcode = 'weixin'
) AS intersection;

这条SQL语句执行的操作如下:

  • dws_m_cus_label_user_app_info表中选择具有'appcode'为'baidu'或'weixin'的记录。
  • 使用GROUP BY子句按devicenumber对记录进行分组。
  • 使用HAVING子句过滤只保留同时具有'appcode'为'baidu'和'weixin'的记录。
  • 最后,通过将结果作为子查询,使用外部查询SELECT COUNT(*)计算交集中的记录数。

具体步骤如下:

  • 子查询SELECT devicenumber FROM dws_m_cus_label_user_app_info WHERE appcode IN ('baidu', 'weixin')检索出具有'appcode'为'baidu'或'weixin'的记录。这个子查询将返回两个'appcode'的所有记录,无论它们是否是相同的设备号。
  • GROUP BY devicenumber对子查询的结果按devicenumber进行分组,这样相同的设备号将被合并为一个组。
  • 使用HAVING COUNT(DISTINCT appcode) = 2来过滤掉只有一个'appcode'的组。只有那些同时具有'appcode'为'baidu'和'weixin'的组将被保留下来。
  • 最后,外部查询SELECT COUNT(*)对子查询的结果进行计数,返回交集中的记录数作为最终结果。

这种优化的查询方式可以避免使用INTERSECT操作符,提高查询性能,并以更高效的方式计算交集中的记录数。

posted @   没有梦想的java菜鸟  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示