2015-05-04 3 views
0

Мне нужно рассчитать сумму одного column(col2), но в столбце есть как цифры, так и текст. Как я могу исключить текст, прежде чем использовать sum()? В таблице есть около 1 миллиона строк, так что есть ли способ, кроме замены текста первым? Мой запрос будет:mysql aggregate function for varchar column

Select col1,sum(col2) from t1 group by col1,col2 

Заранее спасибо

ответ

2

Вы можете использовать регулярное выражение для фильтрации столбца:

Select col1,sum(col2) from t1 WHERE col2 REGEXP '^[0-9]+$' group by col1,col2 
0

Предполагая, что вы имеете в виду числа в начале текса, самый простой способ это просто использовать неявное преобразование:

Select col1, sum(col2 + 0) 
from t1 
group by col1, col2; 

If col2 начинается с нечисловым характером, то MySQL будет возвращать 0. В противном случае он преобразует ведущие числовые символы в число.

Обратите внимание, что ваш запрос на самом деле не имеет смысла, потому что вы агрегируете col2, а также включите его в group by. Я подозреваю, что вы действительно хотите:

Select col1, sum(col2 + 0) 
from t1 
group by col1;