【问题标题】:Counting records in one table that match condition in other table计算一个表中与另一表中的条件匹配的记录
【发布时间】:2019-06-27 15:05:00
【问题描述】:

我正在尝试从 table1 中获取与 table2 中的类别匹配的记录计数。

例如,表格可能如下所示:

ID     A          
1      value1   
2      value2
3      value3
4      value2

ID     A        Category
1      value1   Category1
2      value2   Category1
3      value3   Category2

现在假设我要统计 Table1 中属于 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 在 table1 中出现的次数乘以 A 在 table2 中出现的次数。 我也尝试了 LEFT JOIN,但这给了我相同的结果。

我怎样才能防止这种情况并只获得 table1 的计数?

【问题讨论】:

  • 按类别分组并从列列表中删除AORDER BY 对于一条记录也没有意义。
  • 谢谢。在我的代码中,我将两者分组并尝试删除 A。结果仍然相同。排序是为了最好地反映我的代码(处理数百万条记录;))
  • 我的意思是只按类别分组,而不是两者。
  • 我试过了,结果还是一样
  • 更新您的问题添加预期结果

标签: mysql sql


【解决方案1】:

您可以使用 COUNT(DISTINCT) 来减少它的计数,只要您使用您知道在 table1 中唯一的列。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    相关资源
    最近更新 更多