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 ...
随机推荐
- 文心一言 VS chatgpt (10)-- 算法导论 3.1 2~3题
二.证明:对任意实常量a和b,其中b>0,有(n+a) ^ b=O(n ^ b). 文心一言: 设a=b,则有(n+a) ^ b=(n+b)(n+a)=n ^ b+n ^ b =O(n ^ b) ...
- 2022-05-23:给定一个数组arr,你可以随意挑选其中的数字, 但是你挑选的数中,任何两个数a和b,必须Math.abs(a - b) > 1。 返回你最多能挑选几个数。 来自美团。
2022-05-23:给定一个数组arr,你可以随意挑选其中的数字, 但是你挑选的数中,任何两个数a和b,必须Math.abs(a - b) > 1. 返回你最多能挑选几个数. 来自美团. 答案 ...
- Django4全栈进阶之路10 url路由设置
在 Django 4 中,可以在主路由文件中设置和管理子路由.通常,我们会为每个应用程序创建一个子路由文件,以便更好地组织代码和管理路由. 以下是 Django 4 中设置主路由和子路由的示例: 首先 ...
- Django4全栈进阶之路2 创建虚拟环境、项目、app应用、启动运行项目
一.安装虚拟环境: 命令:pip3 install virtualenv 二.安装管理工具: 命令:pip3 install virtualenvwrapper 三.新建: 命令:python -m ...
- django安装依赖包报错No such file or directory: 'requirement.txt'和警告You are using pip version 22.0.4; however, version 23.0.1 is available.
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirement.txt'WARNI ...
- 【Linux】详解六种配置Linux环境变量的方法(以centos为例)
本文时间 2023-05-19 作者:sugerqube漆瓷 本文重理解,!!忽略环境变量加载原理!! 本文目标:理解六大环境变量配置,选择合适的配置文件进行配置 配置环境的理由 以shell编程为例 ...
- 在开发过程中使用git rebase还是git merge,优缺点分别是什么?
前言 在开发过程中,git rebase 和 git merge 都是常见的代码版本管理工具.它们都能够将分支合并到主分支,并且都有各自的优缺点. git merge git merge 是一种将两个 ...
- 什么是 Spring?为什么学它?
前言 欢迎来到本篇文章!在这里,我将带领大家快速学习 Spring 的基本概念,并解答两个关键问题:什么是 Spring,以及为什么学习 Spring. 废话少说,下面,我们开始吧! Spring 官 ...
- Godot的几个附加脚本和进行继承时比较特别的特性
注: 这是在Godot4.0中总结出的内容,并且语言是C#. 特别的,下面有的特性和C#关系比较大. 基本特性 在Godot中,为某个节点编写特别的代码时,需要为节点新建脚本,或引用已有脚本. 引用脚 ...
- 【Azure K8S】AKS升级 Kubernetes version 失败问题的分析与解决
问题描述 创建Azure Kubernetes Service服务后,需要升级AKS集群的 kubernetes version.在AKS页面的 Cluster configuration 页面中,选 ...