我们如何在mysql中使用JOIN设置计数

table1

p_id    pc_id
3   66
4   67
5   66
6   68
7   65
8   68

table2

pc_id   pc_name
66  AB
67  Cd
65  Ef
68  Gh

I expect in result

Name    Count
AB  2
Cd  1
Ef  1
Gh  2   

I am using my code

SELECT COUNT(*), table2.pc_name
from table2
inner JOIN table1
ON
table2.pc_id = table1.p_id

You need not only to join tables, but to group the data by PC name as well:

SELECT table2.pc_name as PC_Name, COUNT(table1.p_id) as PC_Count
FROM table2 inner JOIN table1 
    ON table2.pc_id = table1.pc_id
GROUP BY table2.pc_name

Here is a link to SQL Fiddle

The above query is working assuming that PC name is unique. If not - you need to also use PC ID in SELECT and GROUP BY statements

Try this:

WITH x AS (SELECT 3 AS p_id, 66 AS pc_id FROM dual UNION ALL
               SELECT 4 AS p_id, 67 AS pc_id FROM dual UNION ALL
               SELECT 5 AS p_id, 66 AS pc_id FROM dual UNION ALL
               SELECT 6 AS p_id, 68 AS pc_id FROM dual UNION ALL
               SELECT 7 AS p_id, 65 AS pc_id FROM dual UNION ALL
               SELECT 8 AS p_id, 68 AS pc_id FROM dual ),
     y AS (SELECT 66 AS pc_id, 'AB' AS pc_name FROM dual UNION ALL
               SELECT 67 AS pc_id, 'CD' AS pc_name FROM dual UNION ALL
               SELECT 65 AS pc_id, 'EF' AS pc_name FROM dual UNION ALL
               SELECT 68 AS pc_id, 'GH' AS pc_name FROM dual  )

select distinct y.pc_name, 
       count(x.pc_id) over (partition by x.pc_id) 
       from x, y 
       where x.pc_id = y.pc_id  ;

OUTPUT wil be:

PC_NAME COUNT(X.PC_ID)OVER(PARTITIONBYX.PC_ID)
------- --------------------------------------
AB                                       2 
CD                                       1 
GH                                       2 
EF                                        1 

Just use GROUP BY clause.. try this.

    SELECT b.pc_name , COUNT(a.p_id) AS 'Count'
    FROM table1 a INNER JOIN table2 b ON a.pc_id = b.pc_id
    GROUP BY b.pc_name