Mysql写查询过滤(column1-sum(something))> 0

时间:2016-02-25 11:18:32

标签: mysql

我有疑问:

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
你可以帮我解决一下吗?

由于

1 个答案:

答案 0 :(得分:1)

而不是在where子句中使用聚合函数使用having子句。

HAVING子句过滤MySQL选择的行。然后MySQL将这些行组合在一起并聚合COUNT函数的数字。

.... group by idtransaction having kuranggesek>0 order by vtiger_servicecontracts.subject 就像WHERE一样,只有在计算出COUNT值后才会发生,所以它会按预期工作。

{{1}}