2024-04-09 10:46:24
在MySQL中,使用DISTINCT关键字按条件去重字段时,需结合具体需求设计查询逻辑。以下是针对不同场景的解决方案:
1. 直接使用DISTINCT多字段组合若需按domain去重并区分“境内/境外”(假设存在isout字段标识),可直接组合字段:
SELECT DISTINCT domain, isout FROM url;若需按domain去重且仅保留“境外”或“境内”的记录(假设通过loc字段判断),可采用以下方法:
方法一:UNION ALL合并结果-- 获取所有境外domain(去重)SELECT DISTINCT domain FROM url WHERE loc = '境外'UNION ALL-- 获取所有境内domain(去重)SELECT DISTINCT domain FROM url WHERE loc != '境外';若需每个domain仅保留一条记录(如优先保留“境外”),可使用子查询:
SELECT DISTINCT domain FROM url u1WHERE loc = '境外' OR (loc != '境外' AND NOT EXISTS ( SELECT 1 FROM url u2 WHERE u2.domain = u1.domain AND u2.loc = '境外' ));若需更灵活控制(如按时间排序取最新记录),可结合ROW_NUMBER():
WITH ranked_urls AS ( SELECT domain, loc, ROW_NUMBER() OVER (PARTITION BY domain ORDER BY CASE WHEN loc = '境外' THEN 1 ELSE 2 END, create_time DESC) AS rn FROM url)SELECT domain, loc FROM ranked_urls WHERE rn = 1;通过上述方法,可灵活实现MySQL中按条件去重的需求。根据实际表结构和业务规则选择最适合的方案。