如何使用查询分别查看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
如何使用查询分别查看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
你需要一个简单的联接和统计查询:
SELECT table1.admin_name, COUNT(*) as cnt
FROM
table1 INNER JOIN table2
ON table1.admin_id = table2.admin_id
GROUP BY
table1.admin_name
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.
@ shA.t我不认为它会。看看这个小提琴:http://sqlfiddle.com/#!9/9c086/2 – MaK
尝试......
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
这样使用这个
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;
您可以使用内选择:
SELECT
table1.admin_name,
(SELECT COUNT(*)
FROM table2
WHERE table1.admin_id = table2.admin_id) As cnt
FROM
table1;
而不是INNER JOIN, LEFT JOIN在这里最适合,不是吗?由于admin_name不会被编入索引(在大多数情况下),因此列admin_name上的GROUPING可能会导致查询缓慢! – MaK
@MaK你可以通过'COUNT(*)'使用'INNER JOIN'或'COUNT(table2.admin_id)'使用'LEFT JOIN',左连接将返回所有管理员,即使是那些有0个产品的管理员,内连接只有那些至少有1个产品 – fthiella
谢谢fthiella – user4464505