1

我用SUM()以下方式计算具有多个条件的行

SELECT date(time),
SUM(CASE WHEN crit1 = 1 AND crit2 NOT LIKE CONCAT('%',table1.id,'%') THEN 1 ELSE 0 END)
FROM table1, table2
GROUP BY date(time)

但是我注意到的是,被计数的项目数是table1. 因此,如果有 100 个项目符合crit1crit2标准,并且 中有 5 个项目table1,那么它会给我 500 个项目的总和。我从 table1 添加和删除了项目,它按比例影响了 SUM 子句,以验证这一点。

如何在不重复计算 CONCAT 中的每个案例的情况下将其相加,或者可能是一种更好的计算方式?

数据结构:

table1          table2

id    name      time                  crit1   crit2 
123   A         2013-05-15 05:00:00     1     456
234   B         2013-05-15 05:00:00     2     789
345   C         2013-05-15 05:00:00     1     678

注意:ID 是唯一的

期望的输出:

2013-05-15   2
4

1 回答 1

1

我相信你想要这个:

SELECT date(time), COUNT(crit2)
FROM table2 
WHERE 
     table2.crit1 = 1
  AND
     table2.crit2 NOT IN (SELECT id FROM table1)
GROUP BY date(time)
于 2013-05-16T04:35:27.173 回答