我在 mysql 数据库上有两个表 vendor
和 medicines
现在我需要根据供应商 ID 计算交易的药品总数,条件状态等于已付款,以单个查询并将其显示给我的用户
我的供应商表如下所示
| ID | vendor_name |
+----+------------------+
| 1 | Marakel Medicine |
| 2 | Ignacio Pharmacy |
| 3 | Rico Medicines |
| 4 | Marco Pharmacy |
+----+------------------+
我的药品表如下所示。
| 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 |
+----+-----------+----------------+---------+
我想要的输出是这样的
+----+------------------+-----------+
| ID | vendor_name | Total Med |
+----+------------------+-----------+
| 1 | Marakel Medicine | 2 |
| 2 | Ignacio Pharmacy | 1 |
| 3 | Rico Medicines | 0 |
| 4 | Marco Pharmacy | 1 |
+----+------------------+-----------+
到目前为止,我的代码如下,我能够根据供应商输出,我只是不知道如何根据状态对它们进行计数,任何建议都会很棒!
SELECT * FROM vendors LEFT JOIN medicine ON vendor.ID = medicines.vendor_id
最佳答案
根据状态[已付款或待处理]和供应商名称对表进行联接操作:
建议的查询:
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
注意: 该查询已经在MSSQL中完成,您可以引用逻辑并在MySQL中尝试。
对应的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
关于php - Mysql连接两个表并根据主键统计总记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46740606/