2017-02-03 6 views
1

У меня есть таблица с записями, как этотMySQL: Группа строк по значению столбца приставкой

(title) 
ABC 001 
ABC 002 
DEF 001 
DEF 002 
... ... 

, и я хочу, чтобы получить только один для каждого, который начинается с одной и той же строки. Например, в этом случае я ожидаю 2 записи, ABC 001 и DEF 001.

Возможно ли это только в MySQL, или я должен сделать это в приложении после получения всех записей?

Спасибо

ответ

2

Вы могли бы сделать с помощью MySQL только с группой по на подстроке

select min(title) 
from my_table 
group by substr(title, 1,3) 

или изменяемого положение пространства

select min(title) 
from my_table 
group by substr(title, 1,locate(' ' , title)) 
+0

Благодарим за ответ, еще одну вещь. Можно ли разделить пробел? Я спрашиваю, потому что не все заголовки начинаются с ровно 3 символами, у других может быть 2 или 4. Но у каждого есть пробел между префиксом и строкой после –

+1

. Да, используя локацию, вы можете управлять позицией с переменным пространством .. answer updated – scaisEdge

+0

решила его, большое спасибо –

1

Вы можете разделить свой титул с помощью строковых функций (например, MID()) и создать 2 столбца. После этого вы получите GROUP BY результат по одному столбцу.

SELECT MID(title, 0, 3) AS B, MID(title, 3, 3) AS B FROM table GROUP BY B

https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_mid

https://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html

+0

Спасибо за ответ, еще одна вещь. Можно ли разделить пробел? Я прошу, потому что не все названия начинаются с ровно 3 символами, у других может быть 2 или 4. Но у каждого есть пробел между префиксом и строкой после –

1

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

select substr1, min(substr2) 
from 
(
    select substring_index(title, ' ', 1) AS substr1, 
    substring_index(title, ' ', -1) AS substr2 
    from your_table 
) sub_query 
group by substr1 
Смежные вопросы