如何编写SQL查询统计两列数据并生成符合条件的临时列
实现方案
1. SQL 实现(兼容绝大多数关系型数据库)
以下代码可直接生成你需要的带temp列的结果,将your_table替换为实际表名即可:
SELECT t1.Col1, t1.Col2, CASE WHEN IFNULL(cnt, 0) < 2 THEN t1.Col1 ELSE NULL END AS temp FROM your_table t1 LEFT JOIN ( SELECT Col2, COUNT(*) AS cnt FROM your_table GROUP BY Col2 ) t2 ON t1.Col1 = t2.Col2 ORDER BY t1.Col1;
如果需要生成临时表方便后续查询,可使用如下写法(支持临时表的数据库通用):
CREATE TEMPORARY TABLE temp_result AS SELECT t1.Col1, t1.Col2, CASE WHEN IFNULL(cnt, 0) < 2 THEN t1.Col1 ELSE NULL END AS temp FROM your_table t1 LEFT JOIN ( SELECT Col2, COUNT(*) AS cnt FROM your_table GROUP BY Col2 ) t2 ON t1.Col1 = t2.Col2 ORDER BY t1.Col1; -- 后续筛选可直接查询临时表,比如取前3条符合条件的数据 SELECT * FROM temp_result WHERE temp IS NOT NULL LIMIT 3;
2. Python Pandas 实现
如果是用Python处理数据表,可使用如下代码:
import pandas as pd # 替换为你自己的数据读取逻辑,比如pd.read_excel、pd.read_csv等 df = pd.DataFrame({ 'Col1': ['0001', '0002', '0003', '0004', '0005', '0006', '0007', '0008'], 'Col2': ['0000', '0001', '0001', '0002', '0002', '0003', '0004', '0005'] }) # 统计Col2各值出现次数 col2_cnt = df['Col2'].value_counts() # 生成temp列 df['temp'] = df['Col1'].apply(lambda x: x if col2_cnt.get(x, 0) < 2 else None) # 筛选temp非空的结果,可按需取行数,比如取前2条用head(2) filtered_data = df[df['temp'].notna()]
内容的提问来源于stack exchange,提问作者Emeka Okoye
相关产品推荐
相关产品推荐

