Как использовать результаты подзапросов в вычитании? - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть следующие запросы. Как я могу выполнить вычитание между результатами 2 запросов с «тратить деньги», «winamount» . Когда я вычитаю (тратит-выиграл) , я получаю следующую ошибку:

1054 - Неизвестный столбец «расходовать» в «списке полей»

SELECT tbl_customers.*,
IFNULL((SELECT sum(win_amount) FROM `tbl_cricket_customer_contests` where customer_id=tbl_customers.id), 0) as winamount,
(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,
(spendamount-winamount)
FROM (`tbl_customers`) 
WHERE `tbl_customers`.`is_deleted` = 'N' 
GROUP BY `tbl_customers`.`id` 
ORDER BY `spendamount` DESC

Ответы [ 3 ]

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

Перепишите ваш запрос, чтобы использовать объединения для суммы сумм:

SELECT t.*,
    COALESCE(c.win_amount, 0) AS winamount,
    COALESCE(tccc.amount, 0) AS spendamount,
    (COALESCE(tccc.amount, 0) - COALESCE(c.win_amount, 0)) AS diff
FROM tbl_customers t
LEFT JOIN
(
    SELECT customer_id, SUM(win_amount) AS win_amount
    FROM tbl_cricket_customer_contests
    GROUP BY customer_id
) c
    ON c.customer_id = t.id
LEFT JOIN
(
    SELECT customer_id, SUM(tcc.entry_fees) as amount
    FROM tbl_cricket_customer_contests tccc
    INNER JOIN tbl_cricket_contest_matches tccm
        ON tccm.id = tccc.match_contest_id
    INNER JOIN tbl_cricket_contests tcc
        ON tcc.id = tccm.contest_id
) tccc
    ON tccc.customer_id = t.id
WHERE
    t.is_deleted = 'N' 
ORDER BY
    spendamount DESC;
1 голос
/ 02 апреля 2019

, пожалуйста, попробуйте этот запрос.

SELECT AA.*,AA.spendamount - AA.winamount As Amount FROM 
(
SELECT tbl_customers.*,
IFNULL((SELECT sum(win_amount) FROM `tbl_cricket_customer_contests` where customer_id=tbl_customers.id), 0) as winamount,
(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,
(spendamount-winamount)
FROM (`tbl_customers`) 
WHERE `tbl_customers`.`is_deleted` = 'N' 
GROUP BY `tbl_customers`.`id` 
ORDER BY `spendamount` DESC
)As AA
1 голос
/ 02 апреля 2019

используйте фактическое выражение вместо псевдонима или вы можете использовать подзапрос

select *,spendamount-winamount from 
( 
   SELECT tbl_customers.*,
    IFNULL((SELECT sum(win_amount) FROM `tbl_cricket_customer_contests` where customer_id=tbl_customers.id), 0) as winamount,
    (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' 

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