我正在尝试从table1获取与table2中的类别匹配的记录数。
表可能看起来像这样:
ID A
1 value1
2 value2
3 value3
4 value2
ID A Category
1 value1 Category1
2 value2 Category1
3 value3 Category2
现在假设我要对表1中属于Category1的记录进行计数
我提出的查询:
SELECT count(table1.A) as count, table2.Category from table1, table2
WHERE table2.Category = 'Category1' AND table1.A = table2.A
GROUP BY table2.Category
ORDER BY count DESC
预期结果:
Category1 3
我得到的结果是
Category1 6
计数是A在表1中出现的次数乘以A在表2中出现的次数。 我还尝试了LEFT JOIN,但这给了我相同的结果。
如何防止这种情况,仅获取table1的计数?
答案 0 :(得分:1)
只要使用您知道表1中唯一的列,就可以使用COUNT(DISTINCT)减少计数。
SELECT COUNT(DISTINCT table1.id) as count, table2.Category
FROM table1 JOIN table2 ON table1.A = table2.A
WHERE table2.Category = 'Category1'
GROUP BY table2.Category
ORDER BY count DESC
P.S .:注意,我也将其更改为使用现代JOIN语法。解决方案不是必需的,但是是时候停止使用1989逗号样式的连接语法了。