Ошибка SQL-запроса: используйте метод SUM, когда # 1054 - неизвестный столбец 'tbl_customers.id' в 'предложении where' - PullRequest
0 голосов
/ 01 апреля 2019

При использовании таблицы идентификатора клиента, чем при получении ошибки # 1054 - Неизвестный столбец 'tbl_customers.id' в 'предложении where' На самом деле проблемы в том, что каждая производная таблица должна иметь свой псевдоним.

Как этот запрос следующий.

SELECT tbl_customers.*,(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 = tbl_customers.id GROUP BY tccc.match_contest_id
) As DT) as spendamount
FROM (`tbl_customers`) 
WHERE `tbl_customers`.`is_deleted` = 'N' 
GROUP BY `tbl_customers`.`id` 
ORDER BY `spendamount` DESC

Ниже структура отношений таблицы, следующая за этим в запросе.

enter image description here

Ответы [ 3 ]

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

Я не уверен, что это будет работать для MySql, но попробуйте переместить производную таблицу из подзапроса в предложение from (Примечание: я изменил группу по столбцу производной таблицы, но я думаю, что этов этом случае все должно быть в порядке):

SELECT tbl_customers.*,(SELECT SUM(amount) As FROM DT) as spendamount
FROM `tbl_customers`
INNER JOIN
(
    SELECT tccc.customer_id, 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) 
    GROUP BY tccc.customer_id 
) As DT
    ON dt.customer_id = `tbl_customers`.`id` 
WHERE `tbl_customers`.`is_deleted` = 'N' 
GROUP BY `tbl_customers`.`id` 
ORDER BY `spendamount` DESC
0 голосов
/ 01 апреля 2019

Если я хочу получить общую сумму, не вкладывайте функции агрегации и удаляйте группу с помощью:

SELECT tbl_customers.*,(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 = tbl_customers.id ) as spendamount
FROM (`tbl_customers`) 
WHERE `tbl_customers`.`is_deleted` = 'N' 
GROUP BY `tbl_customers`.`id` 
ORDER BY `spendamount` DESC

Я также изменил ЛЕВЫЙ СОЕДИНЕНИЕ на СОЕДИНЕНИЕ.Вы суммируете значения из последней таблицы, поэтому только соответствующие строки вносят вклад в сумму.

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

Вы использовали tbl_customers в подзапросе, где у вас не было к нему доступа. Вы просто должны были присоединиться вместо использования где:

SELECT tbl_customers.*,(SELECT SUM(amount) As Amount
FROM 
(
    SELECT tcc.entry_fees*COUNT(tccc.match_contest_id) as amount 
    FROM `tbl_cricket_customer_contests` tccc 
    JOIN `tbl_customers` ON (tccc.customer_id = tbl_customers.id)
    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) 
    GROUP BY tccc.match_contest_id
) As DT) as spendamount
FROM (`tbl_customers`) 
WHERE `tbl_customers`.`is_deleted` = 'N' 
GROUP BY `tbl_customers`.`id` 
ORDER BY `spendamount` DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...