2015-10-05 122 views
0

如何使用查询分别查看a,b,c,d添加的产品数量?选择加入SQL查询计数

table1的

admin_id admin_name 
3   a 
4   b 
5   c 
6   d 

表2

admin_id products 
3   pDeal 
3   pSeal  
4   pAeal 
5   pZeal 
6   pXeal  
3   pHeal 
6   pPeal 

回答

3

你需要一个简单的联接和统计查询:

SELECT table1.admin_name, COUNT(*) as cnt 
FROM 
    table1 INNER JOIN table2 
    ON table1.admin_id = table2.admin_id 
GROUP BY 
    table1.admin_name 
+0

而不是INNER JOIN, LEFT JOIN在这里最适合,不是吗?由于admin_name不会被编入索引(在大多数情况下),因此列admin_name上的GROUPING可能会导致查询缓慢! – MaK

+0

@MaK你可以通过'COUNT(*)'使用'INNER JOIN'或'COUNT(table2.admin_id)'使用'LEFT JOIN',左连接将返回所有管理员,即使是那些有0个产品的管理员,内连接只有那些至少有1个产品 – fthiella

+0

谢谢fthiella – user4464505

0
SELECT t1.admin_name, COUNT(t2.products) 
FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t1.admin_id = t2.admin_id 
WHERE 1 
GROUP BY t2.admin_id 

的LEFT JOIN将确保情况下,当表2没有按对于某些管理员没有任何记录表1.

+0

@ shA.t我不认为它会。看看这个小提琴:http://sqlfiddle.com/#!9/9c086/2 – MaK

1

尝试......

SELECT a.admin_name, COUNT(b.products) as 'CountOfProducts' 
    FROM table1 a INNER JOIN table2 b ON a.admin_id = b.admin_id 
    GROUP BY a.admin_name 
1

这样使用这个

SELECT adm.admin_name,COUNT(pdr.products) as ProductCnt 
FROM table1 AS adm 
JOIN table2 AS pdr 
    ON adm.admin_id = pdr.admin_id 
GROUP BY adm.admin_id; 
0

您可以使用内选择:

SELECT 
    table1.admin_name, 
    (SELECT COUNT(*) 
    FROM table2 
    WHERE table1.admin_id = table2.admin_id) As cnt 
FROM 
    table1;