回答

收藏

计算MySQL中的运行总计

技术问答 技术问答 72 人阅读 | 0 人回复 | 2023-09-13

我有这个MySQL查询:
+ l2 F8 c, z6 {' Y6 y6 rSELECT DAYOFYEAR(`date`)  AS d, COUNT(*) % {; j! [) @/ ^; n
FROM  `orders`
% W$ S7 f( c+ h+ y* n8 [# LWHERE  `hasPaid` > 0* q! c6 E9 L  n% B5 m2 D& d
GROUP  BY d
. X  v: e5 T  B. ~# M( i- w) QORDER  BY d
2 E( W3 ?! m: p! V) _返回如下内容:  \) B! R9 ~& z, c3 b) g# y
d  | COUNT(*) |% j* a1 U2 q/ x, Y
20 |  5       |/ z7 l/ C; o3 i6 x5 s9 r% Z, x. H
21 |  7       |7 P2 s1 u! b& ~9 C4 x
22 | 12       |9 S' N0 _7 u4 X5 Q+ x
23 |  4       |
1 ^9 l. x7 I5 |我真正想要的是末尾的另一列以显示运行总计:
. @# b% _  ]7 X/ \! S* n% cd  | COUNT(*) | ??? |, a) w4 Y; U; g" v: Y3 s" v3 R
20 |  5       |   5 |
2 c6 m) l- J/ B21 |  7       |  12 |
. A; O; k  U9 Q2 i5 \. R22 | 12       |  24 |
: ^1 f- z. E3 ~8 ~23 |  4       |  28 |' }0 T" o% b. z
这可能吗?
/ }1 Q) L2 w8 Z' `/ M               
3 c1 n) S4 P" K解决方案:
! l& u( _+ S' f; Q                / l2 P  C0 ?6 e% w

5 P% S3 r, W" G  ~" v7 R
0 l/ J% H) K5 U                也许对您来说是一个更简单的解决方案,并且可以防止数据库不得不执行大量查询。这仅执行一个查询,然后在一次通过中对结果进行一些数学运算。) p6 y5 ~, y8 D; O
SET @runtot:=0;
9 w  y1 `+ @, u  h; w% bSELECT
6 n, \% ^& F6 x2 ^6 P3 j   q1.d,5 I9 B3 j8 M# }: E
   q1.c,8 U. m$ O( r9 v; E. ^9 p
   (@runtot := @runtot + q1.c) AS rt% U+ {/ E; e. ~/ V- w- ~, r2 B
FROM' F1 N7 s( D$ h3 @3 {
   (SELECT
/ j- O: H2 `- P$ s% Z7 l, M5 p       DAYOFYEAR(`date`) AS d,
4 {! [# n# p5 @" P& f       COUNT(*) AS c
5 J' d2 l' _; x2 N+ S    FROM  `orders`
6 X' u( P$ p; O% A, S% v9 c# h    WHERE  `hasPaid` > 0
3 _0 r, f3 s/ t: B6 B( f+ ~7 C    GROUP  BY d
( V: ?$ I; \; y4 P" l5 W4 f1 i! C5 d    ORDER  BY d) AS q15 T: n+ _+ c* t/ V0 r" T7 x. d4 {
这将为您提供一个额外的RT(运行总计)列。不要错过顶部的SET语句来首先初始化运行中的total变量,否则您将只获得一列NULL值。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则