简体   繁体   English

MySQL连接两个表并基于主键计数总记录

[英]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数据库上有两个表vendormedicines ,现在我需要在一个查询中计算基于状态为等于已付款的供应商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 BYCOUNT

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM