需求背景

需求
  • 一张数据表
  • 其中有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 统计标签出现次数(一行变多行)的更多相关文章

  1. HNU13028Attacking rooks (二分匹配,一行变多行,一列变多列)

    Attacking rooks Time Limit: 20000ms, Special Time Limit:50000ms, Memory Limit:65536KB Total submit u ...

  2. hive一行变多行及多行变一行

    hive一行变多行及多行变一行 场景 name alias zhaoqiansun abc def ghi 处理数据时需要将上表处理成为下面的形式: name alias zhaoqiansun ab ...

  3. pandas dataframe 一行变多行 (query pv统计term pv)

    关键字: 用jieba切词 用expand 一列变多列 用stack 列转行 用group by + aggr 相同term的pv求和 上效果: query pv 今日新鲜事 今日头条 北京天气 上海 ...

  4. SQL语句 拆分某些字段,一行变多行

    原文链接:http://bbs.csdn.net/topics/310219852 ------------------------------------- -- Author : liangCK ...

  5. mysql统计类似SQL语句查询次数

    mysql统计类似SQL语句查询次数 vc-mysql-sniffer 工具抓取的sql分析. 1.先用shell脚本把所有enter符号替换为null,再根据语句前后的字符分隔语句 grep -Ev ...

  6. PHP+Mysql统计文件下载次数实例

    PHP+Mysql统计文件下载次数实例,实现的原理也很简单,是通过前台点击链接download.php传参id,来更新点击次数. 获取文件列表: <?php require 'conn.php' ...

  7. 扫二维码下载apk并统计被扫描次数(及微信屏蔽下载解决方案)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5395715.html 需求:想让用户扫描一个二维码就能下载APP,并统计被扫描次数. 两种实现方法: 1.一 ...

  8. python统计元素重复次数

    python统计元素重复次数 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- from collections import Counter arr = [ ...

  9. javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

    javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...

  10. hash数组快速查找一个字符串中出现最多的字符,并统计出现的次数

    如何快速查找一个字符串中出现最多的字符,并统计出现的次数? 可以使用hash数组,也就是关联数组实现快速查找功能. function seek(str) { var hash = []; var ma ...

随机推荐

  1. 在nuxt下引入外部js

    最近在踩nuxt.js的坑,遇到了许多问题,在这里记录一下,方便以后查阅. 1.如何引入外部js 如果是插件,可以在package.json中写明名字和版本,在nuxt.config.js中注册,然后 ...

  2. 几种SQL盲注的脚本

    BOOL型GET传参sql盲注 点击查看代码 import requests chars ="" for i in range(32,127): chars += chr(i) r ...

  3. 2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p

    2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x ...

  4. ChatGPT 打字机效果原理

    一.背景 在初次使用 ChatGPT 时,我就被打字机的视觉效果吸引.总是感觉似曾相识,因为经常在一些科幻电影中看到,高级文明回传的信息在通讯设备的屏幕上以打字机效果逐步出现,在紧张的氛围下,输出人类 ...

  5. 企业研发效能度量利器,华为云发布CodeArts Board看板服务

    摘要:华为云CodeArts Board正式上线,欢迎体验. 本文分享自华为云社区<企业研发效能度量利器,华为云发布CodeArts Board看板服务>,作者:华为云头条. 数字化时代, ...

  6. ODOO13之12:Odoo 13开发之报表和服务端 QWeb

    报表是业务应用非常有价值的功能,内置的 QWeb 引擎是报表的默认引擎.使用 QWeb 模板设计的报表可生成 HTML 文件并被转化成 PDF.也就是说我们可以很便捷地利用已学习的 QWeb 知识,应 ...

  7. 【Python&目标识别】调用百度智能云API实现植被识别

           ​百度智能云于2015年正式对外开放运营,以"云智一体"为核心赋能千行百业,致力于为企业和开发者提供全球领先的人工智能.大数据和云计算服务及易用的开发工具.凭借先进的 ...

  8. Vue_Django 登录注册+图书管理系统

    Vue前端 注册页面 点击查看代码 <template> <div class="register"> <el-row :gutter="2 ...

  9. Rust的语句与表达式

    Rust 语句与表达式 Rust 中的语法分为两大类: 语句 (statement) 和表达式 (Expression). 语句:指的是要执行的一些操作和产生副作用的表达式. 表达式:主要用于计算求值 ...

  10. MAUI Blazor 项目实战 - 从0到1轻松构建多平台应用UI

    前言 最近在项目中尝鲜了MAUI,总体感受下来还是挺不错的,优缺点并存,但是瑕不掩瑜,目前随着.Net版本的迭代升级对它的支持也越来越友好,相信未来可期!感兴趣的朋友欢迎关注.文章中如有不妥的地方,也 ...