如何在以下条件下找到Sum(field),即``从sum(field)<150的表中选择*
技术问答
199 人阅读
|
0 人回复
|
2023-09-14
|
我只需要检索大小字段总和为
! j4 u& A+ w6 L' B: Guserid size
* _+ i: B7 G% u& n% N1 70
8 [, s1 u+ i3 |' t4 B' v" y. w2 100
! I2 R( \# H- Q c* n3 50
/ J" |$ {7 \& |9 e/ [8 z# V4 25
8 ^- R7 A- N4 O' T- l) h5 120
1 l- H% [2 |. K* H! M9 U6 90
0 B" g3 z7 Y! c6 B6 d# M' d1 |输出应为…
: Y* T. `0 h( i" H& f: Auserid size. c+ d0 X: E/ y) q% r0 _6 s+ k7 t
1 70
J1 h# t1 `- {3 50
0 z4 ~) T% ~# M# [( B$ [( m4 256 Z; e" X: X2 r
例如,如果我们加上70,50,25,我们得到145,即! B9 m" Y0 t/ ]! o0 Z; Y
我将如何编写查询来完成此任务?. {4 @9 p% \6 h8 [
5 M! e+ Y2 v; y4 s i0 U解决方案:
* W. h) f# F Y0 e1 @+ L 6 T% _6 z4 B- S' q# w; A$ X
7 s5 Y( j3 Q S+ K% x
$ ]4 ?3 }6 E( O3 t" S, H9 ~/ n 这是一个查询,将产生以上结果:
/ ^% _- J& u q1 k. LSELECT * FROM `users` u
# B* C7 g0 J% G0 p8 d0 GWHERE (select sum(size) from `users` where size 但是,您描述的想要选择最适合给定大小的用户的问题是装箱问题。这是一个NP-% ?" o3 u+ J$ a2 u
Hard问题,用ANSI% ?; B/ ~/ z" N q: p/ {& @. \
SQL很难解决。但是,以上内容似乎返回了正确的结果,但实际上,它只是从最小的项目开始,然后继续添加项目,直到垃圾箱已满。1 q4 q# b; X; |" ^: S+ J
通用,更有效的装箱算法将是从最大的物品开始,并在适合时继续添加较小的物品。该算法将选择用户5和4。 |
|
|
|
|
|