-- 3.2 想得到如下结果,即同一类A的B列进行求和,如果C列的两个值不同就取1,相同就取同类别的值。CREATETABLE T0302
(
A VARCHAR(10),
B INT,
C VARCHAR(10));INSERTINTO T0302 VALUES('a',1,'X');INSERTINTO T0302 VALUES('a',2,'Y');INSERTINTO T0302 VALUES('b',3,'X');INSERTINTO T0302 VALUES('b',4,'X');INSERTINTO T0302 VALUES('c',5,'Y');INSERTINTO T0302 VALUES('c',6,'Y');
T0302
+------+------+------+| A | B | C |+------+------+------+| a |1| X || a |2| Y || b |3| X || b |4| X || c |5| Y || c |6| Y |+------+------+------+
结果
+------+------+------+| A | B | C |+------+------+------+| a |3| X || b |7| X || c |11| Y |+------+------+------+-- 需要注意的是group by的前面要么有聚合函数 要么是group by后面的字段-- 所以拆分成两张表 判断C列的两个取值 可以一个统计去重后的个数 如果大于1 说明不同SELECT a.A,a.B,CASEWHEN D >1THEN1ELSE E END C
FROM(SELECT A,SUM(B) B,COUNT(DISTINCT(A)) D,MIN(C) E
FROM T0302
GROUPBY A
)a