Ошибка SQL-запроса: Используйте метод SUM, когда # 1111 - Неправильное использование групповой функции - PullRequest
0 голосов
/ 01 апреля 2019

Я использую 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 - Неправильное использование групповой функции

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

Ответы [ 3 ]

2 голосов
/ 01 апреля 2019

Вы не можете использовать агрегатную функцию над другой.Вам нужно разделить запросы:

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 голос
/ 01 апреля 2019

Если вам нужна общая сумма, не вкладывайте функции агрегирования и удалите 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 голосов
/ 01 апреля 2019

Попробуйте:

GROUP BY tcc.entry_fees

вместо

GROUP BY tccc.match_contest_id

Вам необходимо GROUP BY с полем, которое не содержит агрегацию.GROUP BY сгруппирует все ваши entry_fees и для каждой группы подсчитает match_contest_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...