如何截取PRODUCT_ID前缀并筛选去重后的唯一数据行?
解决方案
首先看你的原始数据:
| STORE_ID | PRICE_1 | PRODUCT_ID |
|---|---|---|
| 1052 | 4.99 | 5157917035 |
| 1052 | 4.99 | 5157917035 |
| 1052 | 4.99 | 5157917036 |
| 1052 | 4.99 | 5157917036 |
| 1052 | 4.99 | 5157917037 |
你需要截取PRODUCT_ID的部分值(忽略最后3位)并过滤重复行,完全可以实现,以下是两种常用的实现方式:
方法1:用DISTINCT直接去重
通过字符串截取函数去掉PRODUCT_ID最后3位,再结合DISTINCT保留唯一的行组合:
SELECT DISTINCT STORE_ID, PRICE_1, LEFT(PRODUCT_ID, LENGTH(PRODUCT_ID)-3) AS TRUNCATED_PRODUCT_ID FROM your_table_name;
方法2:用GROUP BY分组去重
如果后续需要对截取后的字段做聚合统计,用GROUP BY更灵活:
SELECT STORE_ID, PRICE_1, LEFT(PRODUCT_ID, LENGTH(PRODUCT_ID)-3) AS TRUNCATED_PRODUCT_ID FROM your_table_name GROUP BY STORE_ID, PRICE_1, LEFT(PRODUCT_ID, LENGTH(PRODUCT_ID)-3);
注:不同数据库的字符串截取函数略有差异,比如SQL Server用LEN()替代LENGTH(),Oracle用SUBSTR(PRODUCT_ID, 1, LENGTH(PRODUCT_ID)-3),但核心逻辑一致。
内容的提问来源于stack exchange,提问作者yuutsu1
相关产品推荐
相关产品推荐

