如何在不使用 Join 的情况下处理引用其他表的相关子查询的问题
Posted
技术标签:
【中文标题】如何在不使用 Join 的情况下处理引用其他表的相关子查询的问题【英文标题】:How to work with problems correlated subqueries that reference other tables, without using Join 【发布时间】:2019-03-28 19:14:58 【问题描述】:我正在尝试处理 BigQuery 的公共数据集 bigquery-public-data.austin_crime.crime
。我的目标是将输出作为三列显示
描述(犯罪),数量,以及该特定描述(犯罪)的最高地区。
我可以通过这个查询获得前两列。
select
a.description,
count(*) as district_count
from `bigquery-public-data.austin_crime.crime` a
group by description order by district_count desc
并希望我可以通过一个查询来完成它,然后我尝试了这个,以便通过添加下面的代码让第三列向我显示该特定描述(犯罪)的***区域
select
a.description,
count(*) as district_count,
(
select district from
( select
district, rank() over(order by COUNT(*) desc) as rank
FROM `bigquery-public-data.austin_crime.crime`
where description = a.description
group by district
) where rank = 1
) as top_District
from `bigquery-public-data.austin_crime.crime` a
group by description
order by district_count desc
我得到的错误是这个。 “不支持引用其他表的相关子查询,除非它们可以去相关,例如通过将它们转换为有效的 JOIN。”
我想我可以通过加入来做到这一点。有人可以在没有加入的情况下使用更好的解决方案吗?
【问题讨论】:
【参考方案1】:以下是 BigQuery 标准 SQL
#standardSQL
SELECT description,
ANY_VALUE(district_count) AS district_count,
STRING_AGG(district ORDER BY cnt DESC LIMIT 1) AS top_district
FROM (
SELECT description, district,
COUNT(1) OVER(PARTITION BY description) AS district_count,
COUNT(1) OVER(PARTITION BY description, district) AS cnt
FROM `bigquery-public-data.austin_crime.crime`
)
GROUP BY description
-- ORDER BY district_count DESC
【讨论】:
你有机会尝试吗?对你起作用吗?它应该! 是的,非常感谢,它确实很忙,没有时间接受这个。 不,这实际上是相应描述的 District_count以上是关于如何在不使用 Join 的情况下处理引用其他表的相关子查询的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在不引用其他单元格的情况下将报表从 Reporting Services 2005 导出到 Excel?
如何在不使用 join 或 cte 的情况下在同一查询中使用动态生成的列
如何在不使用自连接的情况下汇总 MySQL 中每一行的前 30 天?