错误SQL查询:使用SUM方法,#1111时 - 使用组功能无效

问题描述 投票:-1回答:3

我正在使用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说:

1111 - Invalid use of group function

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
mysql sql mysqli
3个回答
2
投票

您不能使用聚合函数而不是另一个函数。您需要分开查询:

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

1
投票

如果您想要总金额,请不要嵌套聚合函数并删除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。您要对最后一个表中的值求和,因此只有匹配的行才会对总和产生影响。


0
投票

试试:

GROUP BY tcc.entry_fees

代替

GROUP BY tccc.match_contest_id

你需要GROUP BY与不包含聚合的字段。 GROUP BY将你所有的entry_fees和每个组分组,计算match_contest_id

© www.soinside.com 2019 - 2024. All rights reserved.