Как использовать ORDER BY / GROUP BY, чтобы игнорировать некоторые выражения? - PullRequest
0 голосов
/ 09 января 2012

Мне нужно сгруппировать, скажем, столбец X, игнорируя то, что находится внутри скобки

      X

aaabbbccc[0]aaabbbccc
aaabbbccc[15]aaabbbccc
aaabbbccc[11]eeefffggg
aaabbbccc[10]eeefffggg
aaabbbccc[17]aaabbbccc
aaabbbccc[19]eeefffggg

As,

      X

aaabbbccc[0]aaabbbccc
aaabbbccc[15]aaabbbccc
aaabbbccc[17]aaabbbccc
aaabbbccc[10]eeefffggg
aaabbbccc[11]eeefffggg
aaabbbccc[19]eeefffggg

Однако, если я использую ORDER BY или GROUP BY,Я всегда получаю как ниже.

aaabbbccc[0]aaabbbccc
aaabbbccc[10]eeefffggg
aaabbbccc[11]eeefffggg
aaabbbccc[15]aaabbbccc
aaabbbccc[17]aaabbbccc
aaabbbccc[19]eeefffggg

Может кто-нибудь подсказать, пожалуйста, как мне побороть этот сценарий.

Спасибо.

1 Ответ

1 голос
/ 09 января 2012

Вы можете группировать / упорядочивать по производным значениям, хотя это исключает использование индекса, поэтому производительность будет большой в больших таблицах:

SELECT ...
...
GROUP BY CONCAT(
    LEFT(yourfield, LOCATE('[', yourfield)),
    RIGHT(yourfield, LENGTH(yourfield) - LOCATE(']', yourfield))
);

ПРИМЕЧАНИЕ: просто сходит с ума, так что это, скорее всего, не сработает, но должно дать вам основу для работы. Предполагая, что это сработает, строка будет разбита на две части - до [ и после ], сложите эти две части вместе, затем сгруппируйте их, эффективно удалив часть [...].

Если вы делаете такие вещи регулярно, то я предлагаю разделить это поле на два отдельных, чтобы у вас были выделенные / постоянные поля «до» и «после», которые можно индексировать и группировать / сортировать по это уродливое чудовище.

...