i have 3 tables
branch- br_id, br_name users user_id user_name user_type (2 types 'owner' 'admin') user_branch (associated branch ) user_branches (comma seperated branch ids in case of 'admin' type ) item it_id it_amount it_owner it_admin it_activated
Here each item is owned by as user type “owner”
Each item is also associated by a user type “admin”
what I want is list of branches and associated total amount and total count
**Branch** **total** **total amount** some branch Name 5 500 another Branch Name 7 780
How can i do it in single query
i tried this which is showing amount of all branches
SELECT br_name, count(it_id), SUM(it_amount), FROM branch LEFT JOIN users ON FIND_IN_SET(br_id,user_branches)>0 LEFT JOIN item ON it_admin=ad_id WHERE it_activated=1 GROUP BY br_name
but I am getting same count and amount in all branches
Advertisement
Answer
I am not sure what you want from the query, so I have taken a guess. My answer query finds the total count and totaled amounts for the items linked to each branch, first by owner and then by admins.
In your query, you have a field “ad_id”:
LEFT JOIN item ON it_admin=ad_id
I assume that is meant to be “user_id”?
I also notice that, in your query, you have not referenced the owners at all. If you are in fact looking for the results from items linked to branches just by the admins, then you can just remove/ignore the first two subqueries in the following query:
SELECT br_name as branchname, (SELECT COUNT( DISTINCT it_id) FROM item i1 JOIN users u1 ON i1.it_owner = u1.user_id AND i1.it_activated=1 WHERE u1.user_branch = b.br_id AND u1.user_type = "owner") as ownertotal, (SELECT COUNT( DISTINCT it_id) FROM item i2 JOIN users u2 ON i2.it_admin = u2.user_id AND i2.it_activated=1 WHERE FIND_IN_SET(b.br_id, u2.user_branches) != 0 AND u2.user_type = "admin") as admintotal , (SELECT SUM(i3.it_amount) FROM item i3 JOIN users u3 ON i3.it_owner = u3.user_id AND i3.it_activated=1 WHERE u3.user_branch = b.br_id AND u3.user_type = "owner") as owneramount, (SELECT SUM(i4.it_amount) FROM item i4 JOIN users u4 ON i4.it_admin = u4.user_id AND i4.it_activated=1 WHERE FIND_IN_SET(b.br_id, u4.user_branches) != 0 AND u4.user_type = "admin") as adminamount FROM branch b;