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 HINT: No function matches the given name and argument types. You might need to add explicit type casts 邦我修改sql
时间: 2024-03-28 12:42:04 浏览: 43
可以尝试将该SQL语句修改为如下形式:
```
SELECT SUM(t.p_totalnav) AS scale, t.publish_date AS date
FROM app.v_jrcrm_hugo_manageasset t
WHERE t.invest_manager LIKE '%钱亚风云%'
GROUP BY t.publish_date;
```
修改的原因是:
- 使用 LIKE 关键字来判断字符串是否包含指定的子字符串;
- 使用 AS 关键字来为查询结果中的字段指定别名;
- GROUP BY 子句中的字段应该与 SELECT 中的字段一致。
相关问题
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
这是一个查询语句,它的作用是从表 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. 使用EXISTS代替子查询:将子查询转化为EXISTS语句,可以提高查询效率。
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
WHERE EXISTS (SELECT 1 FROM app.v_jrcrm_hugo_manageasset m WHERE m.fundcode = t.fundcode AND m.invest_manager LIKE '%钱亚风云%')
AND t.publish_date BETWEEN 'start_date' AND 'end_date'
GROUP BY t.publish_date;
其中,start_date和end_date为查询时间范围。如果invest_manager字段已经创建了索引,可以进一步提高查询效率。
阅读全文