You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL按街区分组统计最高频姓名及语法报错排查

报错原因排查
  • 核心语法错误:你把CTE(公共表表达式)的定义片段直接写在了第一个查询的GROUP BY子句内部,GROUP BY后只允许罗列分组字段,解析器读到不该出现的Max Count片段时直接抛出语法异常,也就是你看到的EOF预期错误。
  • CTE用法完全不符合规范:定义CTE必须以WITH关键字开头,多个CTE之间用逗号分隔;你既没有写WITH关键字,还先后写了Max Count、Counts、MaxCounts三个不统一的表名,前后引用完全断层,即使语法不报错也会报表不存在的错误。
  • 语句结构断裂:你写的三段查询逻辑(统计频次、计算分区最大值、筛选结果)之间没有用正确的语法拼接,是零散的片段,数据库无法按顺序执行。
正确实现代码

你的核心思路(先分组统计频次、再用窗口函数算每个街区的最高频次、最后匹配筛选结果)是对的,只需要把零散的逻辑用标准CTE语法拼接即可,可直接运行的代码如下:

WITH Counts AS (
    -- 统计每个街区下每个host姓名的出现次数
    SELECT 
        host_name, 
        neighbourhood_group,
        COUNT(*) AS Ct
    FROM AB_NYC_2019
    GROUP BY host_name, neighbourhood_group
),
MaxCounts AS (
    -- 按街区分区,匹配每个街区对应的最高出现次数
    SELECT
        *,
        MAX(Ct) OVER (PARTITION BY neighbourhood_group) AS MaxCt
    FROM Counts
)
-- 筛选出每个街区下出现频次等于最高值的姓名
SELECT
    neighbourhood_group,
    host_name
FROM MaxCounts
WHERE Ct = MaxCt;

补充说明:如果同一街区下有多个姓名的出现次数并列第一,上述SQL会返回所有并列的姓名。如果要求每个街区仅返回1个姓名,可以把窗口函数逻辑替换为ROW_NUMBER() OVER (PARTITION BY neighbourhood_group ORDER BY Ct DESC) AS rn,最后筛选rn=1即可。

内容的提问来源于stack exchange,提问作者bobo8219

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:57:11