Add to group by or wrap in first() (or first_value) if you don't care which value you get. 报错解决方案

本文详细解析了 SQL 中 GROUP BY 子句的正确使用方法,通过一个具体的错误示例,阐述了当使用 GROUP BY 进行数据聚合时,所有非聚合列必须包含在 GROUP BY 子句中,或使用聚合函数进行处理。文章提供了修正后的 SQL 语句,展示了如何避免常见的 SQL 编写错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELECT 
SUBSTR(i.fdate,1,10) fdate
,Ftype
,SUM(i.Fdate_interest/100-i.Fpetty_date_ticket/1000000) fbase_interest
,SUM(Fpetty_date_ticket)/1000000 fticket_interest
FROM jz_snap.finance_db_t_finance_up_income i 
join dp_fk_tmp.juzi_up_plan p on i.fplan_id = p.fplan_id
WHERE 
1=1 
AND i.Ftype = 1
AND i.Fdate >= '2018-04-01'
AND i.fdate <= '2018-12-31'
GROUP BY SUBSTR(i.fdate,1,10)

报错:
expression ‘i.Ftype’ is neither present in the group by, nor is it an aggregate function. Add to group by or wrap in first() (or first_value) if you don’t care which value you get.

原因:
使用group by时
select的列,聚合函数前的所有列,都要放在group by之后。这些列条数相同即可!

更改后: (重点在最后一行)

SELECT 
SUBSTR(i.fdate,1,10) fdate
,Ftype
,SUM(i.Fdate_interest/100-i.Fpetty_date_ticket/1000000) fbase_interest
,SUM(Fpetty_date_ticket)/1000000 fticket_interest
FROM jz_snap.finance_db_t_finance_up_income i 
join dp_fk_tmp.juzi_up_plan p on i.fplan_id = p.fplan_id
WHERE 
1=1 
AND i.Ftype = 1
AND i.Fdate >= '2018-04-01'
AND i.fdate <= '2018-12-31'
GROUP BY SUBSTR(i.fdate,1,10),Ftype
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值