计算一个表中符合另一表条件的记录

时间:2019-02-03 19:16:09

标签: mysql sql

我正在尝试从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的计数?

1 个答案:

答案 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逗号样式的连接语法了。