首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有有效的方法来计算大数据表列中的二进制值?

是否有有效的方法来计算大数据表列中的二进制值?
EN

Stack Overflow用户
提问于 2019-04-20 22:14:47
回答 1查看 502关注 0票数 0

我在谷歌云平台上对芝加哥犯罪数据进行大查询。但是,我想计算每一种犯罪类型的逮捕和非逮捕的数量。这在熊猫中是很容易计算的,但对于我来说,如何用大查询在dataframe中计算二进制值是不直观的。有人能给我一个可能的主意让这件事算数吗?

数据

因为芝加哥的犯罪数据很大,我不能在这里给出可重复的例子,但是很容易从这里预览犯罪数据:芝加哥犯罪数据

下面是一个小小的预览:

我的大查询

代码语言:javascript
运行
复制
SELECT
  primary_type,
  count(arrest),
  COUNTIF(year = 2015) AS arrests_2015,
  COUNTIF(year = 2016) AS arrests_2016
FROM
  `bigquery-public-data.chicago_crime.crime`
WHERE
  arrest = TRUE
  AND year IN (2001,
    2018)
  AND primary_type NOT IN ('OTHER OFFENSE', ' all non-criminal types')
GROUP BY
  primary_type,
  arrest

但是这个查询为我提供了空输出,我不知道如何使它工作。

目标

从芝加哥犯罪数据表中,我想提取每个主要类型的总逮捕和非逮捕的数量,我想在2018年年底之前排除其他犯罪和所有非犯罪类型。

如何纠正大查询以获得预期的输出?是否有高效的大查询脚本来获得预期的查询输出?知道吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-20 22:43:05

以下应起作用

代码语言:javascript
运行
复制
#standardSQL
SELECT
  primary_type,
  COUNT(arrest) arrest_total,
  COUNTIF(year = 2015) AS arrests_2015,
  COUNTIF(year = 2016) AS arrests_2016
FROM `bigquery-public-data.chicago_crime.crime`
WHERE arrest = TRUE
AND year BETWEEN 2001 AND 2018
AND primary_type NOT IN ('OTHER OFFENSE', ' all non-criminal types')
GROUP BY primary_type, arrest  

我认为你的问题在下面,你只选择了2001年和2018年,而不是介于两者之间的所有年份(至少包括2015年和2016年)。

代码语言:javascript
运行
复制
AND year IN (2001, 2018)   

因此,相反,您应该使用以下一个

代码语言:javascript
运行
复制
AND year BETWEEN 2001 AND 2018   

此外,如果您想包括非逮捕,您可以使用下面的

代码语言:javascript
运行
复制
#standardSQL
SELECT
  primary_type,
  arrest,
  COUNT(arrest) arrest_total,
  COUNTIF(year = 2015) AS arrests_2015,
  COUNTIF(year = 2016) AS arrests_2016
FROM `bigquery-public-data.chicago_crime.crime`
WHERE year BETWEEN 2001 AND 2018
AND primary_type NOT IN ('OTHER OFFENSE', ' all non-criminal types')
GROUP BY primary_type, arrest

注意:我在这里删除了WHERE arrest = TRUE,并在选择列表中添加了arrest

而不是这些小小的调整--您最初的查询是非常正确的。

如果希望每个primary_type有一个输出行,可以在下面使用

代码语言:javascript
运行
复制
#standardSQL
SELECT
  primary_type,
  COUNTIF(arrest) arrests,
  COUNTIF(NOT arrest) non_arrests,
  COUNT(arrest) arrest_total,
  COUNTIF(year = 2015) AS arrests_2015,
  COUNTIF(year = 2016) AS arrests_2016
FROM `bigquery-public-data.chicago_crime.crime`
WHERE year BETWEEN 2001 AND 2018
AND primary_type NOT IN ('OTHER OFFENSE', ' all non-criminal types')
GROUP BY primary_type   

此外--如果你能“扩大”以下年份(比如2015年)

代码语言:javascript
运行
复制
COUNTIF(year = 2015 AND arrest) AS arrests_2015,
COUNTIF(year = 2015 AND NOT arrest) AS non_arrests_2015,  

是否有任何有计划的方法计算2001至2018年每类罪行的拘捕人数?

代码语言:javascript
运行
复制
#standardSQL
SELECT
  primary_type,
  year,
  COUNTIF(arrest) arrests,
  COUNTIF(NOT arrest) non_arrests,
  COUNT(arrest) arrest_total
FROM `bigquery-public-data.chicago_crime.crime`
WHERE year BETWEEN 2001 AND 2018
AND primary_type NOT IN ('OTHER OFFENSE', ' all non-criminal types')
GROUP BY primary_type, year
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55778216

复制
相关文章

相似问题

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