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

如何统计列中do_id的唯一值数量(支持SQL/Bash实现)

统计URL中do_id的唯一值数量(SQL/Bash实现)

SQL 实现

MySQL/MariaDB

假设数据存在target_table表的url_data列中,通过正则提取do_id参数,解码URL编码字符后统计唯一值:

SELECT COUNT(DISTINCT URL_DECODE(SUBSTRING_INDEX(REGEXP_SUBSTR(url_data, 'do_id=[^&]*'), '=', -1))) AS unique_do_id_count
FROM target_table;

如果你的MySQL版本不支持URL_DECODE,可以手动替换常见编码(比如%7D对应}):

SELECT COUNT(DISTINCT REPLACE(SUBSTRING_INDEX(REGEXP_SUBSTR(url_data, 'do_id=[^&]*'), '=', -1), '%7D', '}')) AS unique_do_id_count
FROM target_table;

PostgreSQL

PostgreSQL 14+可以直接用uri_query_param提取参数,自动处理解码:

SELECT COUNT(DISTINCT uri_query_param(url_data, 'do_id')) AS unique_do_id_count
FROM target_table;

低版本可以用正则+解码逻辑:

SELECT COUNT(DISTINCT convert_from(decode(replace(split_part(regexp_match(url_data, 'do_id=[^&]*'), '=', 2), '%', ''), 'hex'), 'utf8')) AS unique_do_id_count
FROM target_table;

SQL Server

通过拆分URL参数提取do_id,替换编码后统计:

SELECT COUNT(DISTINCT REPLACE(SUBSTRING(value, CHARINDEX('=', value) + 1, LEN(value)), '%7D', '}')) AS unique_do_id_count
FROM target_table
CROSS APPLY STRING_SPLIT(SUBSTRING(url_data, CHARINDEX('?', url_data) + 1, LEN(url_data)), '&')
WHERE value LIKE 'do_id=%';

Bash 实现

假设数据文件为data.txt,用管道工具组合处理:

grep -o 'do_id=[^&]*' data.txt | sed 's/do_id=//' | python3 -c "import sys, urllib.parse; print('\n'.join(urllib.parse.unquote(line.strip()) for line in sys.stdin))" | sort | uniq | wc -l

各步骤作用:

  • grep -o 'do_id=[^&]*':提取所有do_id=开头到下一个&的片段
  • sed 's/do_id=//':移除do_id=前缀,只留参数值
  • python3 ...:用Python做URL解码,处理%7D这类转义字符
  • sort | uniq:对解码后的值去重
  • wc -l:统计唯一值的数量

如果没有Python,用awk手动替换常见编码:

grep -o 'do_id=[^&]*' data.txt | sed 's/do_id=//' | awk '{gsub(/%7D/, "}"); gsub(/%7B/, "{"); print}' | sort | uniq | wc -l

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:42:52