0

次のように 2 列を返すクエリを作成しました。

(私は総列を取得しますcount(*)

date     total  
1,2010     2  
2,2010     5  
3,2010     3  
4,2010     7  
5,2010     6  
6,2010     6  

得られた結果に対してクエリを実行して合計を計算したいと思いますが、各行でその行まで合計するので、次のようになります。

date     total  
1,2010     2  
2,2010     7  
3,2010     13  
4,2010     20  
5,2010     26  
6,2010     32 

これどうやってするの?

4

4 に答える 4

0

これを累計額といいます。標準的な SQL の方法は、相関サブクエリを使用するものです。

select t.date,
       (select sum(total) from t t2 where t2.date <= t.date) as CumulativeTotal
from t

これは、日付フィールドが直接比較可能であると想定しているため、「2,2010」は日付として意味がありません。これが「月、年」であることを意図している場合、それは完全な日付ではなく、追加の作業を行う必要があります。文字列が日付を表す場合は、YYYY-MM または YYYY-MM-DD 形式を使用することを強くお勧めします。

于 2012-12-05T21:36:36.280 に答える
0

ユーザー変数を使用して合計を計算できます。

SELECT id, date, @t:=@t + total AS total
FROM table t1, (SELECT @t:=0) t2
ORDER BY t1.id
于 2012-12-05T21:28:07.293 に答える
0

これを行うには、サブクエリとユーザー変数を使用できます。

set @running_total := 0;
select date, @running_total := @running_total + total
from
(
  select date,count(*) as total
  from your_table
  group by date
  order by date
) s
order by date;
于 2012-12-05T21:31:13.573 に答える
0

興味深い質問です。私は JOIN で何とかやり遂げました。

mysql> select t2.date, sum(t1.total) from tt t1 join tt t2 on t1.date <= t2.date group by t2.date;
+--------+---------------+
| date   | sum(t1.total) |
+--------+---------------+
| 1,2010 |             2 |
| 2,2010 |             7 |
| 3,2010 |            10 |
| 4,2010 |            17 |
| 5,2010 |            23 |
| 6,2010 |            29 |
+--------+---------------+

および元のテーブル:

mysql> select * from tt;
+--------+-------+
| date   | total |
+--------+-------+
| 1,2010 |     2 |
| 2,2010 |     5 |
| 3,2010 |     3 |
| 4,2010 |     7 |
| 5,2010 |     6 |
| 6,2010 |     6 |
+--------+-------+
于 2012-12-05T21:34:57.057 に答える