2013-01-08 7 views
2

У меня есть некоторые сомнения в Функция SUM() in mysql. Когда я использую функцию SUM() без условия, она будет работать нормально. Но если я буду использовать функцию SUM() с условием, она вернет число записей, соответствующих условию. Объясните мне это.mysql sum function issue

Я был создан один стол Учитель с четырьмя столбцами, как показано ниже.

mysql> desc Teacher; 


+--------------+-------------+------+-----+-------------------+ 
| Field  | Type  | Null | Key | Default   | 
+--------------+-------------+------+-----+-------------------+ 
| TeacherId | varchar(36) | NO | PRI | NULL    | 
| FirstName | varchar(50) | NO |  | NULL    | 
| LastName  | varchar(50) | NO |  | NULL    | 
| SyncStatus | int(11)  | NO |  | NULL    | 
+--------------+-------------+------+-----+-------------------+ 

Он содержался в следующих записях.

mysql> select * from Teacher; 

+-----------+-----------+-----------+------------+ 
| TeacherId | FirstName | LastName | SyncStatus | 
+-----------+-----------+-----------+------------+ 
| 001  | Sagar  | Kapadia |   1 | 
| 002  | Vishal | Chaudhari |   1 | 
| 003  | Milan  | Panchal |   1 | 
| 004  | Jugal  | Desai  |   1 | 
| 005  | Baburao | Apte  |   1 | 
| 006  | Jaya  | Bacchan |   0 | 
| 007  | Jaya  | Bacchan |   2 | 
| 008  | Jaya  | Bacchan |   2 | 
+-----------+-----------+-----------+------------+ 
8 rows in set (0.00 sec) 




mysql> select TeacherId,FirstName,LastName,Concat(FirstName,' ',LastName) as FullName,SUM(SyncStatus) from Teacher having FullName like '_____ %'; 
+-----------+-----------+----------+---------------+-----------------+ 
| TeacherId | FIrstName | LastName | FullName  | sum(SyncStatus) | 
+-----------+-----------+----------+---------------+-----------------+ 
| 001  | Sagar  | Kapadia | Sagar Kapadia |    9 | 
+-----------+-----------+----------+---------------+-----------------+ 
1 row in set (0.00 sec) 

Так он вернет мне идеальную сумму на состояние синхронизации. Но если я буду использовать SUM() с условием, то returen количество записей.

mysql> select TeacherId,FIrstName,LastName,Concat(FirstName,' ',LastName) as FullName,sum(SyncStatus = 0) from Teacher having FullName like '_____ %'; 
+-----------+-----------+----------+---------------+---------------------+ 
| TeacherId | FIrstName | LastName | FullName  | sum(SyncStatus = 0) | 
+-----------+-----------+----------+---------------+---------------------+ 
| 001  | Sagar  | Kapadia | Sagar Kapadia |     1 | 
+-----------+-----------+----------+---------------+---------------------+ 
1 row in set (0.00 sec) 



mysql> select TeacherId,FIrstName,LastName,Concat(FirstName,' ',LastName) as FullName,sum(SyncStatus = 1) from Teacher having FullName like '_____ %'; 
+-----------+-----------+----------+---------------+---------------------+ 
| TeacherId | FIrstName | LastName | FullName  | sum(SyncStatus = 1) | 
+-----------+-----------+----------+---------------+---------------------+ 
| 001  | Sagar  | Kapadia | Sagar Kapadia |     5 | 
+-----------+-----------+----------+---------------+---------------------+ 
1 row in set (0.00 sec) 



mysql> select TeacherId,FIrstName,LastName,Concat(FirstName,' ',LastName) as FullName,sum(SyncStatus = 2) from Teacher having FullName like '_____ %'; 
+-----------+-----------+----------+---------------+---------------------+ 
| TeacherId | FIrstName | LastName | FullName  | sum(SyncStatus = 2) | 
+-----------+-----------+----------+---------------+---------------------+ 
| 001  | Sagar  | Kapadia | Sagar Kapadia |     2 | 
+-----------+-----------+----------+---------------+---------------------+ 
1 row in set (0.00 sec) 

ответ

3

Вы правы. Эта функция sum(SyncStatus = 2) возвращает количество строк, потому что, как она выполняется

В каждой строке SyncStatus = 2 будет проверить, если SyncStatus equals 2 и возвращает 1(true) or 0(false), так что вы в основном получаете сумму значений истинности (1)

+0

Спасибо @Ankur. Теперь я понял, как будет выполняться функция SUM(). Еще раз спасибо вам .... – milanpanchal

+0

Просто наткнулся на эту штуку - похоже, она делала то, что я хотел (возвращая количество раз, когда действие было завершено через месяц с помощью 'SUM (подтверждено = 1) 'с' GROUP BY'), но я не был уверен, что это то, что было * предполагается *, чтобы делать - теперь я знаю :) – CD001