La requête suivante échoue et se plaint de #1111 - Invalid use of group function
à cause des deux appels SUM() intégrés dans les boucles IF. Maintenant, j'essaie d'atteindre les mêmes objectifs tout en migrant vers une autre requête SQL, mais j'ai du mal à trouver le temps, quelqu'un pourrait-il me diriger dans la bonne direction?# 1111 - Utilisation incorrecte de la fonction de groupe
La base de données est composée d'une table invoices
qui peut contenir invoices_payments
si le client n'a pas payé la facture immédiatement et a effectué des paiements par instal. Connu cela, j'essaie de résumer toutes les factures.invoice_total soustrayant chaque factures_payments.payment_date qui n'est pas égal à la semaine actuelle seulement si invoices.issued_date est égal à la semaine en cours, sinon j'essaye de faire toutes les factures_payments.payment_amount où factures_payments .payment_date est égal à la semaine en cours.
SELECT
SUM(
IF (
YEARWEEK(i.issue_date, 1) = YEARWEEK(NOW(), 1),
i.invoice_total,
0
)
) AS week_invoiced,
##SUM Functions embedded inside the next IF are causing error: #1111 - Invalid use of group function
SUM(
IF (
## If payment is issued on current week
i.issued_date IS NOT NULL
AND YEARWEEK(i.issued_date, '%Y%m') = YEARWEEK(NOW(), '%Y%m'),
## Sum each invoice.invoice_total and substract each invoices_payments not issued on current week
SUM(i.invoice_total) - SUM(
IF (
ip.id IS NOT NULL
AND YEARWEEK(ip.payment_date, 1) != YEARWEEK(NOW(), 1),
ip.payment_amount,
0
)
),
IF (
## If payment is not issued on current week
i.issued_date IS NULL
OR (
i.issued_date IS NOT NULL
AND YEARWEEK(i.issued_date, '%Y%m') != YEARWEEK(NOW(), '%Y%m')
),
## Sum each invoices_payments issued on current week
SUM(
IF (
ip.id IS NOT NULL
AND YEARWEEK(ip.payment_date, 1) = YEARWEEK(NOW(), 1),
ip.payment_amount,
0
)
),
0
)
)
) AS week_paid,
SUM(
IF (
DATE_FORMAT(i.issue_date, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m'),
i.invoice_total,
0
)
) AS month_invoiced
FROM
`invoices` AS i
INNER JOIN `currency` AS cur ON i.currency_id = cur.id
LEFT JOIN `invoices_payments` AS ip ON ip.invoice_id = i.id
WHERE
i.coach_id = 279
AND (
DATE_FORMAT(i.issue_date, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m')
OR DATE_FORMAT(i.issued_date, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m')
OR (
ip.id IS NOT NULL
AND DATE_FORMAT(ip.payment_date, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m')
)
)
GROUP BY
i.id