我有疑问:
SELECT cf_1095,@sum:=sum(amount), accountingpaidamount,
DATE_FORMAT(paymentdate ,'%d/%m/%Y') as tanggal,
DATE_FORMAT(due_date ,'%d/%m/%Y') as tgljatuhtempo,
vtiger_servicecontracts.subject as kodetb,
vtiger_contactdetails.contactid as memberid,
campaignname as nokk,
vtiger_contactdetails.firstname as namadepan,
vtiger_contactdetails.lastname as namabelakang,
vtiger_leaddetails.lastname as tipekartu,
cf_1085 as namabank,
cf_1095-sum(amount) as kuranggesek
FROM `vtiger_accounting_payments`, vtiger_accounting,
vtiger_servicecontracts,vtiger_servicecontractscf,
vtiger_crmentity,vtiger_user2role, vtiger_role,
vtiger_users,vtiger_leaddetails, vtiger_contactdetails, vtiger_campaign
WHERE
vtiger_crmentity.crmid=vtiger_accounting_payments.idtransaction
and vtiger_accounting.accountingrelated2=vtiger_servicecontracts.servicecontractsid
and vtiger_servicecontractscf.servicecontractsid=vtiger_servicecontracts.servicecontractsid
and accountingtype='Pelunasan Gesek'
and vtiger_accounting_payments.idtransaction=vtiger_accounting.accountingid
and vtiger_crmentity.deleted=0
and vtiger_user2role.userid=vtiger_users.id
and vtiger_crmentity.smcreatorid=vtiger_user2role.userid
and vtiger_user2role.roleid=vtiger_role.roleid
and vtiger_users.user_name='stafroyal'
and cf_1091=leadid
and vtiger_contactdetails.contactid=vtiger_servicecontracts.contactid
and
vtiger_campaign.campaignid=cf_1155
and date_format(paymentdate,'%Y-%m-%d') < date_format(now(),'%Y-%m-%d')
group by idtransaction
order by vtiger_servicecontracts.subject
上面的查询成功正确显示结果,“kuranggesek”列将显示数字量。
我想要完成的是我想添加过滤器
and (cf_1095-sum(amount))>0
因此kuranggesek列的零结果将被消除。但是如果添加那些过滤器,我会收到错误:
Invalid use of group function
你可以帮我解决一下吗?
由于
答案 0 :(得分:1)
而不是在where子句中使用聚合函数使用having子句。
HAVING
子句过滤MySQL选择的行。然后MySQL将这些行组合在一起并聚合COUNT函数的数字。
....
group by idtransaction
having kuranggesek>0
order by vtiger_servicecontracts.subject
就像WHERE一样,只有在计算出COUNT值后才会发生,所以它会按预期工作。
{{1}}