【问题标题】:mySQL unique valuesmySQL 唯一值
【发布时间】:2014-08-17 14:58:28
【问题描述】:

我需要从表中获取唯一值。我有一列用逗号分隔的关键字。我需要导出一个没有重复的所有关键字的列表。计算每个关键字出现的频率。

根据我的研究,这是一个类似 UNPIVOTING 的函数,列数未知?

例如:

关键词


  • 红、蓝、黄
  • 蓝色、橙色、黑色、白色
  • 棕色、黑色、透明、粉红色
  • 蓝色、紫色、橙色

结果

颜色 |数


  • 红1
  • 蓝色3
  • 黄色1
  • 橙色 2
  • 黑色2
  • 白1
  • 棕色 1
  • 清除 1
  • 粉色1
  • 紫1

提前谢谢你!!

** 到目前为止,我已经尝试添加一个explode_table 类型的过程,但意识到我不能从视图中动态调用它。然后我一直在尝试在列上执行反向 GROUP_CONCAT()。我无法生成执行的代码。


我的 echo_Me 的回答:

    SELECT  SUBSTRING_INDEX(SUBSTRING_INDEX(sKeywords, ',', n.n), ',', -1) value , count(*) as counts
FROM tblPatternMetadata 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
    ORDER BY n ) n
    WHERE n.n <= 1 + (LENGTH(sKeywords) - LENGTH(REPLACE(sKeywords, ',', ''))) group by value

【问题讨论】:

  • 发布您尝试过的查询

标签: mysql sql count unique


【解决方案1】:

试试看:

    SELECT  SUBSTRING_INDEX(SUBSTRING_INDEX(t.keywords, ',', n.n), ',', -1) value , count(*) as counts
    FROM table1 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

   ORDER BY n
 ) n
 WHERE n.n <= 1 + (LENGTH(t.keywords) - LENGTH(REPLACE(t.keywords, ',', '')))
 group by value

DEMO HERE

【讨论】:

  • 感谢您的回答。有点过头了,但我正在尝试。我插入了我的列名并尝试在 Navicat 中运行它。我收到“视图的 SELECT 包含 FROM 子句中的子查询”错误。我会在上面的问题中发布我的版本。
  • 怎么了?在我的演示中效果很好,你一定做错了什么。
  • 代码在演示中运行良好。我可以强制 phpMyAdmin 和 Navicat 运行语句。但是,如果我尝试将语句保存到视图中,它会返回该错误。啊。
  • 我刚刚读到关于 mySQL 不允许子查询。这解释了错误“视图的 SELECT 在 FROM 子句中包含子查询”。我想知道是否可以从子查询中创建一个视图,然后在原始查询中调用该视图?
  • 您还有其他解决方案,就是重新组织您的表格并将值与计数分开放置。颜色和计数。那么你不需要子查询,你只需要简单的查询。你的桌子结构不好。不要存储逗号分隔的值。
猜你喜欢
  • 2012-09-27
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 2011-10-30
  • 1970-01-01
  • 2023-03-07
  • 2015-04-23
相关资源
最近更新 更多