|
我想加入三个表并计算表A的总和(数量)。我尝试了一些操作,然后得到了所需的输出。但是我仍然对基于聚合函数和Group By子句感到困惑。
% C$ H/ ?: }5 u9 I通过连接两个或多个表来计算总和值时,我们需要在Group By子句中提及哪些列,为什么我们需要提供这些列?
/ \; e: |# b) V& P/ F5 Y& s, {例如:这是我的表和所需的查询。
9 b# a7 C& U. ]TableA: ItemID, JobOrderID, CustomerID, DivisionID, Quantity
/ v G2 ?& p1 c5 I0 J. P- \. M' STableB: ItemID, ItemName, SpecificationID7 d' P8 e. \% I+ d/ C, {
TableC: SpecificationID, SpecificationName1 ~1 x$ P; |$ T4 s
TableD: DivisionID, DivisionName
# R# Z6 b! K$ V- u. x0 w; ITableE: JobOrderID, JobOrderNo.% J! O7 k$ s2 M0 ]2 _+ O) e- b' ~
TableF: CustomerID, CustomerName! _6 k* }2 @" S4 A' R+ I4 }
我想根据获得的总和(数量)ItemID,CustomerID,JobOrderID和DivisionID。# v4 Q; g. N+ c3 Z/ v
我写了以下查询,它工作正常。但是,如果我删除Group By子句中的任何列,则不会得到期望的结果。为什么?Group
7 W8 m4 e1 U, F2 PBy子句在这里做什么?使用Aggregate函数时如何指定Group By子句?这是我的查询。. f7 ]+ `! t9 r6 L7 B1 C( H
SELECT / O' e8 P% `% w$ N
B.ItemName + ' - ' + C.SpecificationName AS 'ItemName',
) ]. j) c; n- X- e E& k) I SUM(A.Quantity) AS 'Quantity',) d$ x/ J* ?/ \* a2 S$ @8 k
A.ItemID,/ p6 V1 o9 } R9 c5 m0 G! I
D.DivisionName,& O3 E0 F; M. J+ M
F.CustomerName,
# H% k& ~7 s W6 ?$ \8 X E.JobOrderNo,0 G2 h' H5 k5 |8 M7 \+ x6 m/ m
A.DivisionID,/ x1 W7 [, }- J0 P% Z
A.JobOrderID,7 j. _0 N% Z5 @2 {( `- C$ H
A.CustomerID
9 v7 g8 k+ G$ F# n3 J5 C FROM
9 C' _, R/ t' n0 d4 ^ TableA A
" a* {" B8 ]% E0 D* Q! ^& o INNER JOIN TableB B ON B.ItemID = A.ItemID ; u, n! U ?2 f; c3 c) r
INNER JOIN TableC C ON C.SpecificationID = B.SpecificationID
. V+ k2 H4 A+ b9 V INNER JOIN TableD D ON D.DivisionID = A.DivisionID0 v% K) x! f8 g( C) a4 z! g
LEFT JOIN TableE E ON E.JobOrderID = A.JobOrderID# y) F7 j4 l7 d; g
LEFT JOIN TableF F ON F.CustomerID = A.CustomerID6 G! Q3 G+ O6 y) k
WHERE
& }7 m0 L4 h$ O& l- F" D9 r A.ItemID = @ItemID
& G, A) O% \% H1 F" E. d# {8 I GROUP BY
2 N3 n* g7 b" A; \ A.ItemID,1 l/ e4 z% {( g9 Z
A.JobOrderID,
+ w* O4 V) M4 ^: q+ w7 W A.DivisionID,
+ Q; M; f. b' x1 F2 L8 s5 P: N A.CustomerID,5 f- l6 c H( ? @% F4 `
D.DivisionName,
( ?2 V, e+ j0 z6 E3 a F.CustomerName,
/ {1 n5 W9 ~3 E, z4 W E.JobOrderNo,
. y: D: x( J$ j; A B.ItemName, B( g4 M' z1 x/ z1 D) A& E ^* R9 O
C.SpecificationName% F+ A" o6 E+ R
任何人都可以以“ Group by Clause”为例提出建议。
' Q! }- v/ j) t$ f1 I9 g( Y & Q+ r( R) p( {$ {
解决方案:
& r+ M( }' M9 L. \/ ?& u$ G4 i, v ! x7 h$ E/ c5 j& K
4 _# H. P6 x' {+ [' U- q3 _( x
7 o% |! H0 q, n; a0 P5 l
GROUP BY对于指定列的任何唯一组合,都会进行汇总(例如sum,min等)。如果未在GROUP
2 l! Z' V' a4 u7 Z2 F' W1 h2 p; ABY子句或聚合函数中指定某些列名,则SQL引擎将未知该列名,该值应针对该类型的列返回。 |
|