I have two tables vendor
and medicines
on mysql database now i need to count total medicines transacted based on vendor ID with a condition status is equal to paid, in a single query and show it to my users
My vendor table looks like this
| ID | vendor_name |
+----+------------------+
| 1 | Marakel Medicine |
| 2 | Ignacio Pharmacy |
| 3 | Rico Medicines |
| 4 | Marco Pharmacy |
+----+------------------+
My Medicines table looks like this.
| ID | vendor_id | medicine_name | Status |
+----+-----------+----------------+---------+
| 1 | 1 | paracetamol #1 | paid |
| 2 | 1 | paracetamol #1 | paid |
| 3 | 2 | paracetamol #1 | pending |
| 4 | 2 | paracetamol #1 | paid |
| 5 | 4 | paracetamol #1 | paid |
+----+-----------+----------------+---------+
My desire output would be like this
+----+------------------+-----------+
| ID | vendor_name | Total Med |
+----+------------------+-----------+
| 1 | Marakel Medicine | 2 |
| 2 | Ignacio Pharmacy | 1 |
| 3 | Rico Medicines | 0 |
| 4 | Marco Pharmacy | 1 |
+----+------------------+-----------+
So far my code is below i was able to output per vendor i just don't have an idea how to count them based on there status, any suggestion would be great!
SELECT * FROM vendors LEFT JOIN medicine ON vendor.ID = medicines.vendor_id
Join Operation on tables based on status [paid or pending] & vendor name :
Proposed Query :
SELECT vendor.ID, vendor.vendor_name,
COUNT((CASE WHEN [status] <> 'pending' THEN 1 END)) AS 'Total Med'
FROM medicines RIGHT OUTER JOIN
vendor ON medicines.vendor_id = vendor.ID
GROUP BY vendor.vendor_name, vendor.ID
Note: This query has been worked out in MSSQL, you can refer the logic and try for MySQL.
Corresponding MySQL Syntax:
SELECT vendor.ID, vendor.vendor_name,
COUNT((CASE WHEN status <> 'pending' THEN 1 END)) AS 'Total Med'
FROM medicines
RIGHT OUTER JOIN vendor ON
medicines.vendor_id = vendor.ID GROUP BY vendor.vendor_name, vendor.ID
Use GROUP BY
and COUNT
SELECT
v.ID,
v.vendor_name,
COUNT(m.vendor_id) AS 'Total Med'
FROM
vendors v
LEFT JOIN medicine m ON v.ID = m.vendor_id
GROUP BY
v.ID
you should try this
SELECT v.ID,v.vendor_name,COUNT(m.ID) as `Total`
FROM vendor v LEFT JOIN medicines m ON v.ID=m.vendor_id
GROUP BY m.ID
Use Group By its an sql function and also use count its also an sql built in function..some similar shown below.
SELECT vendors.id,vendors.vendor_name,COUNT(medicine.vendor_id) AS 'Total Transaction'
FROM vendors LEFT JOIN medicine ON vendors.id = medicine.vendor_id
GROUP BY vendors.id
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.