2

私は次のようなテーブルを持っています:

id   answers  date    
12   A1       9-nov  
13   A2       10-nov 
14   A3       7-nov  
...                  

A1ここで、各回答についてA2、過去5日間の合計回答を計算しますA3

出力は次のようになります。

answer  count(answer) 
A1      20 
A2      0
A3      34

MySQLでそれを行うにはどうすればよいですか?

4

2 に答える 2

2

これを試して:

SELECT answers, COUNT(*)
FROM Table1
WHERE DATEDIFF(NOW(), `date`) >= 5
GROUP BY answers;

SQL フィドルのデモ

更新:代わりにこれを試してください:

SELECT t1.answers, IFNULL(COUNT(t2.answers), 0)
FROM table1 t1
LEFT JOIN
(
    SELECT DISTINCT answers FROM table1
) t2 ON  t1.answers = t2.answers AND DATEDIFF(NOW(), t1.`date`) <= 5
GROUP BY t1.answers;

SQL フィドルのデモ

于 2012-11-11T11:11:00.117 に答える
0

過去5日間とはどういう意味ですか? 今から最後の 5 日間ですか、それともテーブルに存在する最後の 5 日間ですか? テーブルに存在する最後の 5 日間を意味する場合、テーブルでいくつかの日を逃すと 5 日以上前になる可能性がある場合、次のようなものを使用できます。

SELECT
  ans.answers, count(last_tab.id)
FROM
  (select distinct answers from tab) ans
  left join
  (select id, answers
   from tabs
        inner join
        (select distinct date from tab order by date desc limit 5) dt
  on tab.date = dt.date) last_tab
  on ans.answers = last_tab.answers
group by ans.answers;
于 2012-11-11T18:01:41.980 に答える