百分位函数与BigQuery中的GROUPBY一起使用

时间:2017-08-09 00:02:00

标签: google-bigquery

在我的CENSUS表中,我想按国家分组,并且每个州都要获得县中位数和县数。

在psql,redshift和snowflake中,我可以这样做:

percentile_cont

我试图在标准的BigQuery中找到一种很好的方法。我注意到那里有无证的SELECT state, COUNT(county), PERCENTILE_CONT(population2000, 0.5) OVER () AS `medPop` FROM CENSUS GROUP BY state; 分析功能,但我必须做一些重大的黑客才能让它做我想做的事。

我希望能够用我所收集到的正确论点做同样的事情:

SELECT list expression references column population2000 which is neither grouped nor aggregated at

但此查询会产生错误

SELECT
  MAX(nCounties) AS nCounties,
  state,
  MAX(medPop) AS medPop
FROM (
  SELECT
    nCounties,
    T1.state,
    (PERCENTILE_CONT(population2000,
        0.5) OVER (PARTITION BY T1.state)) AS `medPop`
  FROM
    census T1
  LEFT OUTER JOIN (
    SELECT
      COUNT(county) AS `nCounties`,
      state
    FROM
      census
    GROUP BY
      state) T2
  ON
    T1.state = T2.state) T3
GROUP BY
  state

可以得到我想要的答案,但如果这是我想做的事情的推荐方式,我会非常失望:

PERCENTILE_CONT

有没有更好的方法来做我想做的事情?此外,from django.db import models from django.contrib.auth.models import User from datetime import date # Create your models here. class UserProfileInfo(models.Model): user = models.OneToOneField(User) portfolio_site = models.URLField(blank=True) profile_pic = models.ImageField(upload_to='profile_pics',blank='True') def __str__(self): return self.user.username class UserPosts(models.Model): post_title = models.CharField(max_length=100,unique=True) post_sub_title = models.CharField(max_length=250,unique=False) post_author = models.ForeignKey('User',User.username) post_date = models.DateField(default=date.today,blank=True) post_body = models.TextField(max_length=1000,unique=False) def __str__(self): return str(self.post_title) 函数是否会被记录?

感谢阅读!

1 个答案:

答案 0 :(得分:10)

感谢您的关注。 PERCENTILE_CONT正在开发中,一旦它成为GA,我们将发布文档。我们将首先支持它作为分析函数,并且我们计划稍后将其作为聚合函数(允许GROUP BY)支持它。在这两个版本之间,一个更简单的解决方法是

SELECT
  state,
  ANY_VALUE(nCounties) AS nCounties,
  ANY_VALUE(medPop) AS medPop
FROM (
  SELECT
    state,
    COUNT(county) OVER (PARTITION BY state) AS nCounties,
    PERCENTILE_CONT(population2000,
      0.5) OVER (PARTITION BY state) AS medPop
  FROM
    CENSUS)
GROUP BY
  state
相关问题