DB2 SELECT MOST 中频繁出现并与其他表链接

Posted

技术标签:

【中文标题】DB2 SELECT MOST 中频繁出现并与其他表链接【英文标题】:In DB2 SELECT MOST Frequent occurrence and link with other table 【发布时间】:2021-05-09 07:15:52 【问题描述】:

我有两张桌子CensusCrime

crime 表中,我需要找到community_area_number 出现频率最高的地方 并将crimecommunity_area_number 链接到表censuscommunity_area_number 以获得community_area_name

我可以做第一步,但我无法链接到另一个表。请指教我哪里做错了。谢谢

%%sql
SELECT COUNT(CR.COMMUNITY_AREA_NUMBER) AS MOST_FREQ, CR.COMMUNITY_AREA_NUMBER, CE.COMMUNITY_AREA_NAME from CRIME AS CR, CENSUS AS CE 

WHERE CR.COMMUNITY_AREA_NUMBER = CE.COMMUNITY_AREA_NUMBER
GROUP BY CR.COMMUNITY_AREA_NUMBER 
ORDER BY COUNT(CR.COMMUNITY_AREA_NUMBER) DESC LIMIT 1

预期输出

MOST_FREQ ,community_area_number,, COMMUNITY_AREA_NAME

      43                25                     Uptown

人口普查样本

犯罪样本

【问题讨论】:

这和Python无关,是SQL问题 样本数据和期望的结果对您的问题很有帮助。 感谢您的建议。我已经添加了 【参考方案1】:

您应该这样编写查询:

SELECT COUNT(*) AS MOST_FREQ, 
       CR.COMMUNITY_AREA_NUMBER, CE.COMMUNITY_AREA_NAME 
FROM CRIME CR JOIN
     CENSUS CE 
     ON CR.COMMUNITY_AREA_NUMBER = CE.COMMUNITY_AREA_NUMBER
GROUP BY CR.COMMUNITY_AREA_NUMBER, CE.COMMUNITY_AREA_NAME 
ORDER BY COUNT(*) DESC
LIMIT 1;

注意使用正确、明确、标准、可读的JOIN 语法。 永远不要FROM 子句中使用逗号。

不过,相关的更改是将CE.COMMUNITY_AREA_NAME 包含在GROUP BY 中。作为一般规则,所有非聚合列都应在GROUP BY 中。

此外,COUNT(*) 更简单地计算匹配项,因此此查询使用它而不是计算列的非NULL 值。

【讨论】:

感谢这项工作。没学过JOIN。将继续阅读。感谢您使它成为可能。【参考方案2】:

您正在使用聚合函数COUNT(CR.COMMUNITY_AREA_NUMBER) AS MOST_FREQ 并且所有其他(非聚合)返回值都需要在 GROUP BY 子句中。

对于您的查询,这意味着尝试将 E.COMMUNITY_AREA_NAME 添加到 GROUP BY。

【讨论】:

CE.COMMUNITY_AREA_NAME 添加到GROUP BY 后,出现以下错误A reference to column "COMMUNITY_AREA_NUMBER" is ambiguous 您必须对列进行限定 - 以 CE 为前缀。或 CR。引用您要从中绘制它的表格

以上是关于DB2 SELECT MOST 中频繁出现并与其他表链接的主要内容,如果未能解决你的问题,请参考以下文章

出现错误 在执行 DB2 EXPORT IXF 时处理 Action String 参数中的 SELECT 字符串时发生 SQL 错误“-204”?

DB2 SELECT COUNT,如果为 NULL,则默认为 0

使用内部联接删除 DB2

DB2 - 通过从其他表中选择行数来限制表中获取的行

在 DB2 中选择期间 SQLCODE= -9999

在 python 3.8 中出现异常的 show_most_informative_features() 错误