SQL with SUM, group, order, left join, exclude and limit
So I came across a scenario where I need to know the top developers of applications based on how many times their software has been downloaded.
There are 3 tables involved here.
The developers table
the orders_software table
the orders_software_downloads table
The whole goal is get this information with 1 Sql query.The basic relationships are as follows:
there are many developers in the developer table
there are many softwares to 1 order in the orders_software table
there are many downloads to 1 software to 1 order in the orders_software_downloads table.
So we select the developer name from the developer table, and the download count from the orders_software_downloads table. Left join to get all the tables together. Exclude counts that are null. Then group the results by the owner of each software. Which is a row of the software table.
This will be a great case to use SUM
we can modify the download count to sum(download_count) and as long as we have that group by, it will sum up the group.
So sql will look like this:
SELECT developer.name, SUM(orders_software_download.download_count) as sum
LEFT JOIN orders_software on software.id = orders_software.software_id
LEFT JOIN orders_products_download on orders_products.orders_software_id = orders_products_download.id
WHERE orders_software_download.download_count IS NOT NULLGROUP BY software.software_owner
ORDER BY sum DESC
And then from this the result will give you an array of the top developers where you can know who the developer is an how many times in total their software was downloaded