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

嵌套结构中按personnel_guid数量分组job_id的SQL查询求助

解决方案

场景1:person数组中无重复personnel_guid

如果每个job_id对应的person数组里,personnel_guid都是唯一的,直接用ARRAY_LENGTH()统计数量即可,无需展开数组:

SELECT
  job_id,
  ARRAY_LENGTH(personnel_data.person) AS personnel_count,
  CASE
    WHEN ARRAY_LENGTH(personnel_data.person) < 10 THEN '少于10人'
    WHEN ARRAY_LENGTH(personnel_data.person) BETWEEN 10 AND 25 THEN '10-25人'
    WHEN ARRAY_LENGTH(personnel_data.person) BETWEEN 26 AND 75 THEN '25-75人'
    ELSE '75人以上'
  END AS personnel_group
FROM
  your_table_name;

场景2:person数组中存在重复personnel_guid

如果数组里有重复的personnel_guid,需要先通过UNNEST()展开数组,去重后再统计:

WITH job_personnel_stats AS (
  SELECT
    job_id,
    COUNT(DISTINCT p.personnel_guid) AS personnel_count
  FROM
    your_table_name,
    UNNEST(personnel_data.person) AS p
  GROUP BY
    job_id
)
SELECT
  job_id,
  personnel_count,
  CASE
    WHEN personnel_count < 10 THEN '少于10人'
    WHEN personnel_count BETWEEN 10 AND 25 THEN '10-25人'
    WHEN personnel_count BETWEEN 26 AND 75 THEN '25-75人'
    ELSE '75人以上'
  END AS personnel_group
FROM
  job_personnel_stats;

关键说明

  • 替换代码中的your_table_name为你的实际表名
  • CASE语句的区间边界可根据需求调整,比如若要让25-75人包含25和75,可把第二个WHEN的上限设为24,第三个设为BETWEEN 25 AND 75
  • 第一种方法效率更高,适合无重复数据的场景;第二种方法通过COUNT(DISTINCT)确保统计唯一标识的数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:07:39