首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得包含某些值的重复字段的频率?

如何获得包含某些值的重复字段的频率?
EN

Stack Overflow用户
提问于 2016-03-12 23:14:30
回答 1查看 472关注 0票数 3

假设我有一个像这样的数据集

代码语言:javascript
复制
{"id":15,"classification":"goth","categories":["blackLipstick","hotTopic"]}
{"id":14,"classification":"goth","categories":["drinking","girls","hotTopic"]}
{"id":13,"classification":"jock","categories":["basketball","chicharones","fooball","girls","pop","pregnant","sports","starTrek","tortilla","tostada"]}
{"id":12,"classification":"geek","categories":["academics","cacahuates","computers","glasses","papas","physics","programming","ps4","science"]}
{"id":11,"classification":"geek","categories":["cacahuates","fajitas","math","pregnant","raves","xbox"]}
{"id":10,"classification":"goth","categories":["cutting"]}
{"id":9,"classification":"geek","categories":["cafe","chalupa","chimichangas","manson","physics","pollo","tostada"]}
{"id":8,"classification":"jock","categories":["basketball","chalupa","enchurrito","piercings","running","sports"]}
{"id":7,"classification":"geek","categories":["aguacate","blackLipstick","computers","fajitas","fooball","glasses","lifting","outdoors","physics","pollo","pregnant","ps4"]}
{"id":6,"classification":"none","categories":["brocode","girls","raves","tacos"]}
{"id":5,"classification":"goth","categories":["blackLipstick","blackShirts","drugs","mole","piercings","tattoos","tortilla"]}
{"id":4,"classification":"jock","categories":["girls","tattoos"]}
{"id":3,"classification":"goth","categories":["girls"]}
{"id":2,"classification":"none","categories":["cutting","enchurrito","fooball","pastel","pregnant","tattoos","vampires"]}
{"id":1,"classification":"goth","categories":["cacahuates","cutting","drugs","empanadas","frijoles","manson","nachos","outdoors","piercings","tattoos"]}
{"id":0,"classification":"geek","categories":["pollo","pop","programming","science"]}

我如何写一个查询,在哪里我可以说:“如果某人有类别‘数学’,他们通常有哪些其他类别?”

对于这个数据集,我可以写一些类似这样的东西来告诉我什么是哥特人、极客和骑手最喜欢的。

代码语言:javascript
复制
SELECT classification, categories, count(categories) C 
FROM [xx.stereotypes] group by classification
, categories ORDER BY C DESC LIMIT 1000

但是在我的真实数据集中,我没有分类字段。我想要一个查询,它可以帮助我创建像"goth“、"jock”或"geek“这样的分类。

例如,如何选择类别中包含“数学”的类别的所有计数,这只能选择数学。

代码语言:javascript
复制
SELECT categories, count(categories) C FROM [xx.stereotypes]
where categories CONTAINS "math" group by categories ORDER
BY C DESC LIMIT 1000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-13 00:32:24

如何选择类别中包含“数学”的类别的所有计数?

代码语言:javascript
复制
SELECT categories, COUNT(1) AS weight
FROM [xx.stereotypes]
OMIT RECORD IF NOT SOME(categories = 'math')
GROUP BY categories
ORDER BY weight DESC

我如何写一个查询,在哪里我可以说:“如果某人有类别‘数学’,他们通常有哪些其他类别?”

代码语言:javascript
复制
SELECT category, related_category, weight 
FROM (
  SELECT category, related_category, COUNT(1) AS weight 
  FROM (
    SELECT a.id AS id, a.categories AS category, b.categories AS related_category 
    FROM (FLATTEN([xx.stereotypes], categories)) AS a
    JOIN (FLATTEN([xx.stereotypes], categories)) AS b
    ON a.id = b.id
    HAVING category != related_category
  )
  GROUP BY category, related_category
) 
WHERE category = 'math'
ORDER BY category, weight DESC, related_category

我想要一个可以帮助我创建分类的查询

下面是为每个id分配分类的简化方法

代码语言:javascript
复制
SELECT id, category AS classification 
FROM (
  SELECT 
    x.id AS id, y.category AS category, SUM(weight) AS rate,
    ROW_NUMBER() OVER(PARTITION BY id ORDER BY rate DESC) AS pos
  FROM (FLATTEN(xx.stereotypes, categories)) AS x
  JOIN (
    SELECT category, related_category, COUNT(1) AS weight 
    FROM (
      SELECT a.id AS id, a.categories AS category, b.categories AS related_category 
      FROM (FLATTEN([xx.stereotypes], categories)) AS a
      JOIN (FLATTEN([xx.stereotypes], categories)) AS b
      ON a.id = b.id
    )
    GROUP BY category, related_category 
  ) AS y
  ON x.categories = y.related_category
  GROUP BY 1, 2 
)
WHERE pos = 1
ORDER BY id DESC
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35964475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档