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

如何简化统计列中含指定后缀的URI数量的SQL查询?

简化URI后缀统计查询

需求背景

我需要统计表default.www-live-lon-cf中,2023年2月1日至8月31日期间,包含以下后缀的URI数量:

ukpga
ukla
asp
asc
anaw
mwa
ukcm
nia
aosp
aep
aip
apgb
nisi
mnia
apni

当前使用的查询通过多次UNION实现,功能正常但代码冗长,希望简化写法。现有查询示例:

SELECT 'uksi' AS legtype,
 COUNT (uri)  
FROM "default"."www-live-lon-cf" 
WHERE date >= date('2023-02-01')
  AND date <= date('2023-08-31')
  AND uri LIKE '%.uksi'
UNION
SELECT 'ukpga' AS legtype,
 COUNT (uri)  
FROM "default"."www-live-lon-cf" 
WHERE date >= date('2023-02-01')
  AND date <= date('2023-08-31')
  AND uri LIKE '%.ukpga'

简化方案

方案1:使用CASE表达式分组统计

只需要扫描一次表,通过CASE匹配后缀后分组计数,代码更紧凑:

SELECT
  CASE
    WHEN uri LIKE '%.ukpga' THEN 'ukpga'
    WHEN uri LIKE '%.ukla' THEN 'ukla'
    WHEN uri LIKE '%.asp' THEN 'asp'
    WHEN uri LIKE '%.asc' THEN 'asc'
    WHEN uri LIKE '%.anaw' THEN 'anaw'
    WHEN uri LIKE '%.mwa' THEN 'mwa'
    WHEN uri LIKE '%.ukcm' THEN 'ukcm'
    WHEN uri LIKE '%.nia' THEN 'nia'
    WHEN uri LIKE '%.aosp' THEN 'aosp'
    WHEN uri LIKE '%.aep' THEN 'aep'
    WHEN uri LIKE '%.aip' THEN 'aip'
    WHEN uri LIKE '%.apgb' THEN 'apgb'
    WHEN uri LIKE '%.nisi' THEN 'nisi'
    WHEN uri LIKE '%.mnia' THEN 'mnia'
    WHEN uri LIKE '%.apni' THEN 'apni'
    WHEN uri LIKE '%.uksi' THEN 'uksi'
  END AS legtype,
  COUNT(uri) AS count
FROM "default"."www-live-lon-cf"
WHERE date >= date('2023-02-01')
  AND date <= date('2023-08-31')
  AND (
    uri LIKE '%.ukpga' OR
    uri LIKE '%.ukla' OR
    uri LIKE '%.asp' OR
    uri LIKE '%.asc' OR
    uri LIKE '%.anaw' OR
    uri LIKE '%.mwa' OR
    uri LIKE '%.ukcm' OR
    uri LIKE '%.nia' OR
    uri LIKE '%.aosp' OR
    uri LIKE '%.aep' OR
    uri LIKE '%.aip' OR
    uri LIKE '%.apgb' OR
    uri LIKE '%.nisi' OR
    uri LIKE '%.mnia' OR
    uri LIKE '%.apni' OR
    uri LIKE '%.uksi'
  )
GROUP BY legtype
ORDER BY legtype;

方案2:使用CTE生成后缀列表再关联查询

这种方式更易维护,新增/删除后缀只需修改CTE部分,还能显示无匹配的后缀(计数为0):

WITH suffixes AS (
  SELECT 'ukpga' AS legtype UNION ALL
  SELECT 'ukla' UNION ALL
  SELECT 'asp' UNION ALL
  SELECT 'asc' UNION ALL
  SELECT 'anaw' UNION ALL
  SELECT 'mwa' UNION ALL
  SELECT 'ukcm' UNION ALL
  SELECT 'nia' UNION ALL
  SELECT 'aosp' UNION ALL
  SELECT 'aep' UNION ALL
  SELECT 'aip' UNION ALL
  SELECT 'apgb' UNION ALL
  SELECT 'nisi' UNION ALL
  SELECT 'mnia' UNION ALL
  SELECT 'apni' UNION ALL
  SELECT 'uksi'
)
SELECT
  s.legtype,
  COUNT(t.uri) AS count
FROM suffixes s
LEFT JOIN "default"."www-live-lon-cf" t
  ON t.uri LIKE CONCAT('%.', s.legtype)
  AND t.date >= date('2023-02-01')
  AND t.date <= date('2023-08-31')
GROUP BY s.legtype
ORDER BY s.legtype;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:30:10