mysql - 用于从列中了解流行主题标签的 SQL 查询,该列具有存储为数组的主题标签列表

标签 mysql sql scala apache-spark apache-spark-sql

我一直在尝试从看起来像这样的表格中找到一个流行的主题标签。

| Tweet_id |                 Hashtags                |
-----------------------------------------------------
|    id1   | [hashtag1,hashtag2,hashtag3]            |
|    id2   | [hashtag2,hashtag4]                     |
|    id3   | []                                      |
|    id4   | [hashtag1]                              |                             

所以我尝试使用 MySQL 查询从表中打印最常出现的主题标签。根据我对此所做的研究,我只能使用FIND_IN_SET检索单个主题标签。但可以看出,列中的主题标签数量与行不同。我的查询必须搜索数组中的所有主题标签并生成结果。

注意: 我真正在做的是,我有一个 json 文件,并且我正在使用 Sparks sqlContext 来转换 json 并将其注册为表。该表如上所示。我正在使用 sqlContext.sql("//sqlquery//") 来从这些表中检索数据。

更新:- 这是架构

root
 |-- hashtag: array (nullable = true)
 |     |-- element: string (containsNull = true)

最佳答案

您可以拆分和计数:

SELECT sub.val AS `HashTag`, COUNT(*) AS `count`
FROM
(
  SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.HashTag, ',', n.n), ',', -1) AS val
  FROM (SELECT Substring(HashTag, 2, LENGTH(HashTag) - 2) AS HashTag FROM tab) AS t 
  CROSS JOIN 
  (
   SELECT a.N + b.N * 10 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
  ) n
   WHERE n.n <= 1 + (LENGTH(t.HashTag) - LENGTH(REPLACE(t.HashTag, ',', '')))
) sub
WHERE val <> ''
GROUP BY sub.val
ORDER BY `count` DESC
-- LIMIT 1;

SqlFiddleDemo

输出:

╔═══════════╦═══════╗
║   val     ║ count ║
╠═══════════╬═══════╣
║ hashtag1  ║     2 ║
║ hashtag2  ║     2 ║
║ hashtag4  ║     1 ║
║ hashtag3  ║     1 ║
╚═══════════╩═══════╝

无论如何,你应该规范你的表。

关于mysql - 用于从列中了解流行主题标签的 SQL 查询,该列具有存储为数组的主题标签列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34040402/

相关文章:

python - 正则表达式匹配字符串中的 [ ^'] but also\'

sql - 实现查找/查找下一个算法

arrays - 在 Scala 中表示欧几里得距离的最简单方法

mysql - 在 SQL 语句中插入 "WHERE"条件的位置

php - session ID 和搜索脚本

php - 日期过滤在 mysql、php 中不起作用

java - 如何使用 google ml api 修复无效范围(400 错误请求)

scala - 如何匹配没有特定类型类实例的类型?

mysql - 防止脚本在 docker 容器中退出

mysql - 从 sql 获取当前用户和其他用户之间的最后一条消息