Reputation: 21
Is there a way of getting all the rows used in a group?
As you would expect, the query below only returns one row per custref
. But if totalamount
is > 0, I want it to return all the rows in the group. Otherwise none.
$sql = "SELECT
debtors.custref,
debtors.amount,
users.bnkSort,
users.bnkAccNum,
users.bnkAccName,
SUM(debtors.amount) AS totalamount
FROM debtors
LEFT JOIN users ON debtors.custref=users.custref
WHERE
users.bank = 'Yes'
GROUP BY debtors.custref
";
Upvotes: 2
Views: 80
Reputation: 1269773
Your query has multiple columns that are invalidated by the group by
-- columns that are not the same in rows in the group. Also, the where
clause is undoing the left join
. So, this is basically your query:
SELECT d.custref, SUM(d.amount) AS totalamount
FROM debtors d JOIN
users u
ON d.custref = u.custref
WHERE u.bank = 'Yes'
GROUP BY d.custref;
To get all the fields, you can use this as a subquery:
SELECT d.*, u.*
FROM (SELECT d.custref, SUM(d.amount) AS totalamount
FROM debtors d JOIN
users u
ON d.custref = u.custref
WHERE u.bank = 'Yes'
GROUP BY d.custref
HAVING totalamount > 0
) dc JOIN
debtors d
ON dc.custref = d.custref JOIN
users u
WHERE u.bank = 'Yes';
ON dc.custref = u.custref
Upvotes: 1