2012-04-19 2 views
1

전에 SUM (a * b)을 본 적이 없습니다. 나는 누군가가 나에게 의도 된 행동을 말할 수 있기를 바라고, 그것이 SQL 표준의 일부인지 또는 MySQL이 단지 구현할 수있는 어떤 것이라는 것을 알고있다. 예는 :SUM (a * b)의 기능은 무엇입니까?

localhost test> CREATE TABLE numbers (id int not null primary key auto_increment, a int, b int); 
Query OK, 0 rows affected (0.03 sec) 

localhost test> INSERT INTO numbers (a,b) VALUES (1, 2), (3,4),(1,1),(5,6); 
Query OK, 4 rows affected (0.00 sec) 
Records: 4 Duplicates: 0 Warnings: 0 

localhost test> select * FROM numbers GROUP BY id; 
+----+------+------+ 
| id | a | b | 
+----+------+------+ 
| 1 | 1 | 2 | 
| 2 | 3 | 4 | 
| 3 | 1 | 1 | 
| 4 | 5 | 6 | 
+----+------+------+ 
4 rows in set (0.00 sec) 

localhost test> select SUM(a), SUM(b) FROM numbers GROUP BY id; 
+--------+--------+ 
| SUM(a) | SUM(b) | 
+--------+--------+ 
|  1 |  2 | 
|  3 |  4 | 
|  1 |  1 | 
|  5 |  6 | 
+--------+--------+ 
4 rows in set (0.00 sec) 

localhost test> select SUM(a*b), SUM(a), SUM(b) FROM numbers GROUP BY id; 
+----------+--------+--------+ 
| SUM(a*b) | SUM(a) | SUM(b) | 
+----------+--------+--------+ 
|  2 |  1 |  2 | 
|  12 |  3 |  4 | 
|  1 |  1 |  1 | 
|  30 |  5 |  6 | 
+----------+--------+--------+ 
4 rows in set (0.00 sec) 

localhost test> alter table numbers add col2 int not null; 
Query OK, 4 rows affected (0.03 sec) 
Records: 4 Duplicates: 0 Warnings: 0 

localhost test> update numbers set col2 = id %2; 
Query OK, 2 rows affected (0.00 sec) 
Rows matched: 4 Changed: 2 Warnings: 0 

localhost test> select col2, SUM(a*b), SUM(a), SUM(b) FROM numbers GROUP BY col2; 
+------+----------+--------+--------+ 
| col2 | SUM(a*b) | SUM(a) | SUM(b) | 
+------+----------+--------+--------+ 
| 0 |  42 |  8 |  10 | 
| 1 |  3 |  2 |  3 | 
+------+----------+--------+--------+ 
2 rows in set (0.01 sec) 

내가 마지막 행에서 80와 30를 예상 한 것 또는 오류가 하나 개의 행을 따기의 MySQL의의 표준이 아닌 동작을 사용하면 생산 (나는 SQL_MODE =이 ONLY_FULL_GROUP_BY 활성화).

답변

6

SUM(a*b)은 완벽하게 유효한 표준 SQL입니다. 각 행에 대해 a * b을 계산하고 각 그룹 내에서 결과를 합계합니다 (또는 GROUP BY가 지정되지 않은 경우 전체 테이블에 대한 결과).

 
+----+------+------+------+-----+ 
| id | col2 | a | b | a*b | 
+----+------+------+------+-----+ 
| 1 | 1 | 1 | 2 | 2 |     
| 2 | 0 | 3 | 4 | 12 | --+ 
| 3 | 1 | 1 | 1 | 1 | |---> 12 + 30 = 42 
| 4 | 0 | 5 | 6 | 30 | --+ 
+----+------+------+------+-----| 

그것은 하지SUM(a) * SUM(b) 동일하다.

+0

굉장합니다. 감사합니다! –

관련 문제