单表SQL子查询按TickerSymbol分组统计指定区间TickerSentiment数量
SQL查询修改方案
问题根因
- 原有子查询没有添加和外层查询的
TickerSymbol关联条件,所以每次统计的都是全表符合条件的总记录数 - 外层查询没有添加
GROUP BY子句,所以会返回每个TickerSymbol对应的所有原始行,不会按股票代码合并统计结果
最优修改方案(无需子查询,直接分组聚合)
该写法性能更高、逻辑更通用,兼容所有主流SQL dialect:
SELECT TickerSymbol, COUNT(CASE WHEN TickerSentiment BETWEEN 0.000000001 AND 1 THEN 1 END) AS "Positive Sentiment" FROM Ticker WHERE TickerSymbol != 'NONE' GROUP BY TickerSymbol;
子查询写法修正版
如果需要保留原有的子查询结构,修改如下:
SELECT t1.TickerSymbol, ( SELECT COUNT(p.TickerSymbol) FROM Ticker p WHERE p.TickerSymbol = t1.TickerSymbol -- 新增和外层查询的关联条件 AND p.TickerSymbol != 'NONE' AND p.TickerSentiment BETWEEN 0.000000001 AND 1 ) AS "Positive Sentiment" FROM Ticker t1 WHERE t1.TickerSymbol != 'NONE' GROUP BY t1.TickerSymbol; -- 新增分组去重
补充说明
SQL中判断值不等于的场景推荐用!=运算符,IS NOT一般仅用于NULL值的判断逻辑。
内容的提问来源于stack exchange,提问作者JGProgrammer
相关产品推荐
相关产品推荐

