0

table1MySQL で、テーブルと で外部結合を実行したいと考えていますtable2

今日と昨日だけでtable2グループ化された関連の数を取得したいのですが、カウントが0の他のタイプも表示できるようにしたいです。これが私がこれまでに持っているものですcodecode

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 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

このクエリは、クエリの最初の部分のコードテーブルが本当に必要なため、必要以上に複雑です。テーブルが1つしかない場合は、おそらくもっと単純な形式になります。

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 に答える
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.codeWHERE h.code is nullそのため、2 番目のクエリで実行する価値があります。このため、そのクエリには 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 

何らかの理由で日付条件をhandに適用したいoが、レコードがある場合にのみ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 に答える