select sum(t.p_totalnav) scale,t.publish_date date from app.v_jrcrm_hugo_manageasset t where strpos(t.invest_manager,'钱亚风云')>0 group by 2
时间: 2024-03-29 11:34:59 浏览: 58
这是一个查询语句,它的作用是从表 app.v_jrcrm_hugo_manageasset 中筛选出投资经理包含“钱亚风云”的记录,并按照 publish_date 分组,计算每组的 p_totalnav 总和,同时给每组取别名 scale 和 date。
需要注意的是,strpos()函数用于查找字符串中某个子串第一次出现的位置,如果找到了则返回该位置的索引,否则返回 0。在这个查询中,我们使用 strpos() 函数查找 invest_manager 字段中是否包含“钱亚风云”,如果包含则返回大于 0 的索引值,相当于一个布尔值,用于筛选出符合条件的记录。
相关问题
select sum(t.p_totalnav) as scale,t.publish_date as date from (select fundcode,invest_manager,CAST(p_totalnav AS DECIMAL(22,4)) as p_totalnav,publish_date from app.v_jrcrm_hugo_manageasset)t where strpos(t.invest_manager,'钱亚风云')>0 group by 2 优化SQL
优化思路:
1. 使用JOIN代替子查询:将子查询转化为JOIN语句,可以提高查询效率。
2. 使用DECIMAL代替CAST:在定义表结构的时候,可以将p_totalnav字段的类型定义为DECIMAL,避免在查询时进行类型转换。
3. 使用索引:对invest_manager字段创建索引,可以加快查询速度。
优化后的SQL如下:
SELECT SUM(t.p_totalnav) AS scale, t.publish_date AS date
FROM app.v_jrcrm_hugo_manageasset t
JOIN (SELECT DISTINCT fundcode FROM app.v_jrcrm_hugo_manageasset WHERE invest_manager LIKE '%钱亚风云%') m
ON t.fundcode = m.fundcode
WHERE t.publish_date BETWEEN 'start_date' AND 'end_date'
GROUP BY t.publish_date;
其中,start_date和end_date为查询时间范围。如果invest_manager字段已经创建了索引,可以进一步提高查询效率。
阅读全文