0

在 MySQL 中,我想对表table1table2.

我只想获取今天和昨天的相关计数table2code但我也希望能够看到code计数为 0 的其他类型。这就是我到目前为止所拥有的

SELECT h.code, count(h.code) as count, h.timestamp
FROM table1 h LEFT OUTER JOIN table2 o ON h.code= o.code 
GROUP BY h.code 

UNION 

SELECT h.code, count(h.code) as count, h.timestamp
FROM table1 h RIGHT OUTER JOIN table2 o ON h.code= o.code 
GROUP BY h.code 

所以我想申请这样的东西

WHERE h.timestamp >= CURRENT_DATE - INTERVAL 1

但也包括 table1 中的所有记录,但计数为 0

我希望这是有道理的,希望有人能提供帮助!

4

3 回答 3

0
SELECT 
 h.code, 
 count(case h.code is null then 0 else 1 end) as count, 
 h.timestamp
FROM table1 h LEFT OUTER JOIN table2 o ON h.code= o.code 
WHERE h.timestamp >= CURRENT_DATE - INTERVAL 1
group by h.code
于 2012-12-11T23:23:28.203 回答
0

所以我想申请这样的东西

WHERE h.timestamp >= CURRENT_DATE - INTERVAL 1

但也包括 table1 中的所有记录,但计数为 0

如所写,您将结果复制到h.code= o.code. 所以它值得WHERE h.code is null在第二个查询中做。因此,这意味着对于该查询,我们不想应用 where 条件,h因此我们只需将其添加到第一个查询。

SELECT h.code, count(h.code) as count, h.timestamp
FROM table1 h LEFT OUTER JOIN table2 o ON h.code= o.code 
 WHERE h.timestamp >= CURRENT_DATE - INTERVAL 1
GROUP BY h.code 

UNION ALL

SELECT h.code, count(h.code) as count, h.timestamp
FROM table1 h RIGHT OUTER JOIN table2 o ON h.code= o.code 
WHERE h.code is null
GROUP BY h.code 

如果出于某种原因您想将日期标准应用于ho仅当有记录时,o则第一个 where 子句将是

WHERE h.timestamp >= CURRENT_DATE - INTERVAL 1
      AND
      (o.timestamp >= CURRENT_DATE - INTERVAL 1
        or o.code is null)
于 2012-12-11T22:27:17.740 回答
0

嗯,你有所有代码的表吗?

select codes.code, coalesce(t.cnt) as cnt
from (select distinct code
      from table1
     ) codes left outer join
     (select code, count(*) as cnt
      from table1
      where timestamp >= CURRENT_DATE - INTERVAL 1
      group by code
     ) t
     on codes.code = t.code

该查询比必要的要复杂一些,因为它确实需要一个代码表作为查询的第一部分。如果您只有一个表,这可能是一种更简单的形式:

select code,
       sum(case when timestamp >= CURRENT_DATE - INTERVAL 1 then 1 else 0 end) as cnt
from table1
group by code
于 2012-12-11T22:03:12.747 回答