[英]Mysql joining two tables and counting total records based on primary key
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 我在mysql数据库上有两个表
vendor
和medicines
,现在我需要在一个查询中计算基于状态为等于已付款的供应商ID交易的药品总数,并将其显示给我的用户
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. 注意:此查询已在MSSQL中解决,您可以参考逻辑并尝试使用MySQL。
Corresponding MySQL Syntax: 对应的MySQL语法:
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
使用
GROUP BY
和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
MYSQL version of @tharif's MSSQL solution. @tharif的MSSQL解决方案的MYSQL版本。
SELECT
v.ID,
v.vendor_name,
COUNT((CASE WHEN m.`status` <> 'pending' THEN 1 END)) AS 'Total Med'
FROM
vendor v
LEFT JOIN medicines m ON v.ID = m.vendor_id
GROUP BY v.ID
It is a good idea to read on group by and count if you are new to these. 最好按分组阅读并计数(如果您不熟悉)。
Use Group By its an sql function and also use count its also an sql built in function..some similar shown below. 使用Group By的sql函数,也可以使用count的sql内置函数。如下所示。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.