如何使用ORDER BY / GROUP BY忽略某些表达式?

时间:2012-01-09 04:49:17

标签: mysql database group-by sql-order-by

我需要组合在一起,比如X列,忽略括号内的内容

      X

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

如,

      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 个答案:

答案 0 :(得分:1)

您可以对派生值进行分组/排序,但这会排除使用索引,因此在大型表格上的性能会非常糟糕:

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

注意:刚刚离开我的头脑,所以这很可能不起作用,但应该给你一个工作的基础。假设它有效,它会将字符串分成两部分 - 在[之前和]之后,将这两部分放在一起,然后对它们进行分组,从而有效地消除[...]部分

如果你经常做这类事情,那么我建议将这个字段拆分成两个独立的字段,这样你就可以在专用/永久'之前'和'之后'字段中进行索引和分组/排序比这丑陋的怪物。