Mysql 统计标签出现次数(一行变多行)
需求背景
需求
- 一张数据表
- 其中有sid字段,代表tag,每行数据可能有多个tag字段
- 统计全量数据中所有tag出现的次数(按tag分组,分别有多少数据)
source table demo
| id | sid |
|---|---|
| 1 | a3,a4,a1,a2,a5 |
| 2 | a5,a3,a4,a2 |
| 3 | a5,a3,a4 |
target table demo
| sid_tag | sid_occurrence |
|---|---|
| a1 | 1 |
| a2 | 2 |
| a3 | 3 |
| a4 | 3 |
| a5 | 3 |
SQL query in mysql
select substring_index( substring_index( sid , ',', id_table.help_topic_id + 1 ), ',',- 1 ) as sid_tag,count(sid) as sid_occurrence from src_t JOIN mysql.help_topic id_table on id_table.help_topic_id < (
length(src_t.sid) - length(replace(src_t.sid, ',', '')) + 1
) GROUP BY sid_tag
hive
select tag,count(*) from(
select tag from table_name
lateral view explode(split(taglist,',')) r1 AS tag) a group by a.tag;
解析
- 利用系统表mysql.help_topic进行了index的记录(可以使用其他表),更暴力的解法是直接新建一张只有id列的表,可以预防系统表id不够用(一般足够了)
- JOIN a.id < b.id,解决了复制行的操作;若b.id = 5,a.id 为(1,2,3,4,5),返回数据为 [(1,5),(2,5),(3,5),(4,5)]
- substring_index( substring_index( sid , ',', id_table.help_topic_id + 1 ), ',',- 1 ) 利用index表中的index,作为子串索引进行数据拆分。索引构建基于上一步的join。
- 随后正常groupby统计
实验
mysql
select * from (
SELECT concat('a',topic.help_topic_id) as sid,topic.help_topic_id AS id
FROM mysql.help_topic topic
WHERE help_topic_id IN ('1', '2', '3', '4', '5')
) as id_table JOIN (
SELECT concat('b',topic.help_topic_id) as sid,topic.help_topic_id AS id
FROM mysql.help_topic topic
WHERE help_topic_id IN ('1', '2', '3')
) as id_table2 on id_table2.id <= id_table.id
结果
| sid | id | sid | id |
|---|---|---|---|
| a1 | 1 | b1 | 1 |
| a2 | 2 | b1 | 1 |
| a2 | 2 | b2 | 2 |
| a3 | 3 | b1 | 1 |
| a3 | 3 | b2 | 2 |
| a3 | 3 | b3 | 3 |
| a4 | 4 | b1 | 1 |
| a4 | 4 | b2 | 2 |
| a4 | 4 | b3 | 3 |
| a5 | 5 | b1 | 1 |
| a5 | 5 | b2 | 2 |
| a5 | 5 | b3 | 3 |
Mysql 统计标签出现次数(一行变多行)的更多相关文章
- HNU13028Attacking rooks (二分匹配,一行变多行,一列变多列)
Attacking rooks Time Limit: 20000ms, Special Time Limit:50000ms, Memory Limit:65536KB Total submit u ...
- hive一行变多行及多行变一行
hive一行变多行及多行变一行 场景 name alias zhaoqiansun abc def ghi 处理数据时需要将上表处理成为下面的形式: name alias zhaoqiansun ab ...
- pandas dataframe 一行变多行 (query pv统计term pv)
关键字: 用jieba切词 用expand 一列变多列 用stack 列转行 用group by + aggr 相同term的pv求和 上效果: query pv 今日新鲜事 今日头条 北京天气 上海 ...
- SQL语句 拆分某些字段,一行变多行
原文链接:http://bbs.csdn.net/topics/310219852 ------------------------------------- -- Author : liangCK ...
- mysql统计类似SQL语句查询次数
mysql统计类似SQL语句查询次数 vc-mysql-sniffer 工具抓取的sql分析. 1.先用shell脚本把所有enter符号替换为null,再根据语句前后的字符分隔语句 grep -Ev ...
- PHP+Mysql统计文件下载次数实例
PHP+Mysql统计文件下载次数实例,实现的原理也很简单,是通过前台点击链接download.php传参id,来更新点击次数. 获取文件列表: <?php require 'conn.php' ...
- 扫二维码下载apk并统计被扫描次数(及微信屏蔽下载解决方案)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5395715.html 需求:想让用户扫描一个二维码就能下载APP,并统计被扫描次数. 两种实现方法: 1.一 ...
- python统计元素重复次数
python统计元素重复次数 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- from collections import Counter arr = [ ...
- javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数
javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...
- hash数组快速查找一个字符串中出现最多的字符,并统计出现的次数
如何快速查找一个字符串中出现最多的字符,并统计出现的次数? 可以使用hash数组,也就是关联数组实现快速查找功能. function seek(str) { var hash = []; var ma ...
随机推荐
- 通过Serverless私有化部署ChatGPT Web
作为开发人员,想要自己部署一个渠道访问或是想随时访问但是奈何魔法有限,又或是海外服务器太贵,不想耗费这个钱,本文借助 Serverless 来搭建一下私有 ChatGPT 服务,Serverless ...
- 2022-11-29:查找重复的电子邮箱。以下数据中a@b.com是重复的,请写出sql语句。 DROP TABLE IF EXISTS person; CREATE TABLE person (
2022-11-29:查找重复的电子邮箱.以下数据中a@b.com是重复的,请写出sql语句. DROP TABLE IF EXISTS person; CREATE TABLE person ( i ...
- 2021-01-31:Redis集群方案不可用的情况有哪些?
福哥答案2021-01-31:[答案来自此链接:](https://www.zhihu.com/question/442112697)一个集群模式的官方推荐最小最佳实践方案是 6 个节点,3 个 Ma ...
- vue全家桶进阶之路9:常用指令
以下是一些常见的指令: v-bind - 用于绑定一个或多个属性到组件或 HTML 元素上. v-model - 用于双向绑定一个表单元素或组件的值到数据模型上. v-for - 用于循环遍历一个数组 ...
- CF1825C LuoTianyi and the Show
传送门(luogu) 传送门(CF) 前言 我来水题解力 简化题意 \(n\) 个人,\(m\) 个座位,每个人落座的方法有三种: 坐最左边的人的左边,没人的话就做 \(m\) 号座位,若最左边的为 ...
- django 如何提升性能(高并发)
django 如何提升性能(高并发) 对一个后端开发程序员来说,提升性能指标主要有两个一个是并发数,另一个是响应时间网站性能的优化一般包括 web 前端性能优化,应用服务器性能优化,存储服务器优化. ...
- 系统MySQL服务无法启动报错1067的四种解决方法win7系统MySQL服务无法启动报错1067的四种解决方法
有些win7系统用户在登陆mysql或者重装mysql时出现"无法启动MYSQL服务,错误1067",而且重启.修复注册表都没办法解决问题.那么遇到MySQL服务无法启动问 ...
- 在 VS Code 里逛知乎、发文章?Zhihu on VSCode 来啦!重新定义内容创作!
本文为 牛岱 的原创文章 在2020年2月10日首发于"玩转VS Code"知乎专栏 你是否已经厌倦了知乎 Web 端文本编辑器糟糕的使用体验和时而出现的奇怪 Bug? 身为程序员 ...
- LeetCode 双周赛 106(2023/06/10)两道思维题
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 加入知识星球提问. 往期回顾:LeetCode 单周赛第 348 场 · 数位 DP 模版学会了吗? 双周赛 106 ...
- 【Rust-book】第五章 使用结构体来组织相关联的数据
第五章 使用结构体来组织相关联的数据 结构,或者结构体,是一种自定义数据类型,它允许我们命名多个相关的值并将它们组成一个有机的结合体. 可以把结构体视作对象中的数据属性 1 对比元组和结构体之间的异同 ...