我正在使用MySQL,这是我的查询。此查询工作正常但获取多行数量。
SELECT tcc.entry_fees*COUNT(tccc.match_contest_id) as amount
FROM `tbl_cricket_customer_contests` tccc
LEFT JOIN tbl_cricket_contest_matches tccm on(tccm.id=tccc.match_contest_id)
LEFT JOIN tbl_cricket_contests tcc ON (tcc.id=tccm.contest_id)
WHERE tccc.customer_id = 9 GROUP BY tccc.match_contest_id
使用SUM方法比得到错误MySQL说:
SELECT SUM(tcc.entry_fees*COUNT(tccc.match_contest_id)) as amount
FROM `tbl_cricket_customer_contests` tccc
LEFT JOIN tbl_cricket_contest_matches tccm on(tccm.id=tccc.match_contest_id)
LEFT JOIN tbl_cricket_contests tcc ON (tcc.id=tccm.contest_id)
WHERE tccc.customer_id = 9 GROUP BY tccc.match_contest_id
您不能使用聚合函数而不是另一个函数。您需要分开查询:
SELECT SUM(amount) As Amount
FROM
(
SELECT tcc.entry_fees*COUNT(tccc.match_contest_id) as amount
FROM `tbl_cricket_customer_contests` tccc
LEFT JOIN tbl_cricket_contest_matches tccm on(tccm.id=tccc.match_contest_id)
LEFT JOIN tbl_cricket_contests tcc ON (tcc.id=tccm.contest_id)
WHERE tccc.customer_id = 9 GROUP BY tccc.match_contest_id
) As DT
更新
正如我在评论中所写,我不是MySql专家,但我认为这正是您所寻找的。
注意我在外部查询中注释掉了group by
子句。
SELECT tc.*,
(
SELECT SUM(amount) As Amount
FROM
(
SELECT tcc.entry_fees*COUNT(tccc.match_contest_id) as amount
FROM `tbl_cricket_customer_contests` AS tccc
LEFT JOIN tbl_cricket_contest_matches AS tccm on(tccm.id=tccc.match_contest_id)
LEFT JOIN tbl_cricket_contests AS tcc ON (tcc.id=tccm.contest_id)
WHERE tccc.customer_id = tc.id GROUP BY tccc.match_contest_id
) As DT
) as spendamount
FROM `tbl_customers` As tc
WHERE tc.`is_deleted` = 'N'
-- Do you really need that group by here? GROUP BY tc.`id`
ORDER BY tc.`spendamount` DESC
如果您想要总金额,请不要嵌套聚合函数并删除group by
:
SELECT SUM(tcc.entry_fees) as amount
FROM tbl_cricket_customer_contests tccc JOIN
tbl_cricket_contest_matches tccm
ON tccm.id = tccc.match_contest_id JOIN
tbl_cricket_contests tcc
ON tcc.id = tccm.contest_id
WHERE tccc.customer_id = 9;
我也将LEFT JOIN
改为JOIN
。您要对最后一个表中的值求和,因此只有匹配的行才会对总和产生影响。
试试:
GROUP BY tcc.entry_fees
代替
GROUP BY tccc.match_contest_id
你需要GROUP BY
与不包含聚合的字段。 GROUP BY
将你所有的entry_fees
和每个组分组,计算match_contest_id