如何按ID列分组字符串表并按优先级规则聚合书名列数据
实现方案
核心思路
- 同ID下记录设置优先级:英文书名 > 法文书名,剔除书名、语言为空的无效记录
- 同优先级下按书名的字典序升序排序,取每个ID排序首位的记录
- 同ID下无有效记录时,标题、语言、销量均返回字符串
null
代码实现(通用标准SQL)
WITH ranked_books AS ( SELECT ID, Title, Language, Sales, -- 自定义排序规则:英文优先级最高,同语言按书名升序排列 ROW_NUMBER() OVER ( PARTITION BY ID ORDER BY CASE Language WHEN 'English' THEN 1 WHEN 'French' THEN 2 ELSE 3 END, Title ASC ) AS rn FROM your_table_name -- 替换为你的实际表名 WHERE Title IS NOT NULL AND Language IS NOT NULL -- 过滤空值无效记录 ) SELECT t.ID, COALESCE(rb.Title, 'null') AS Title, COALESCE(rb.Language, 'null') AS Language, COALESCE(rb.Sales, 'null') AS Sales FROM (SELECT DISTINCT ID FROM your_table_name) t LEFT JOIN ranked_books rb ON t.ID = rb.ID AND rb.rn = 1 ORDER BY t.ID;
注意事项
如果同ID下的销量字段存在不一致的情况,可按需调整销量的取值逻辑,例如将rb.Sales替换为MAX(rb.Sales)做聚合取值即可。
内容的提问来源于stack exchange,提问作者W1010
相关产品推荐
相关产品推荐

