我在这里要做的是提取字符串的最后一部分。字符串总是以相同的方式结束:thisismy-string。所以我反过来搜索' - '来提取'string'(可以是任何东西)。即:'hello-world'获得'世界'
SELECT DISTINCT REVERSE(SUBSTR(REVERSE(field_name), 1, INSTR(REVERSE(field_name), '-')-1)) AS grp FROM table GROUP BY grp ORDER BY id
哪个工作正常。现在我如何计算次数,SQL在执行DISTINCT函数时发现了相同的“字符串结束”?是否可以在同一个查询中组合它?我正在将此查询用于PHP项目...
答案 0 :(得分:2)
SELECT
COUNT(*) AS `occurrences`,
SUBSTRING_INDEX(`field_name`, '-', -1) AS `last_part`
FROM table
GROUP BY `last_part`
SUBSTRING_INDEX([field or string], [delimiter], -1)
将为您提供最后一部分(由于-1),COUNT()
尊重分组
编辑:你的标题说的是“lastIndexOf”,我假设你的意思是每个分组的最高id
。您可以将MAX(`id`)
添加到您选择的字段
SELECT
COUNT(*) AS `occurrences`,
SUBSTRING_INDEX(`field_name`, '-', -1) AS `last_part`,
MAX(`id`) AS `last_index_of`
FROM table
GROUP BY `last_part`
实施例
id | field_name
------------------------
1 | foo-bar
2 | woo-bar
3 | woo-foo-baz
4 | foo-foo
5 | foo-boo
6 | foo-bar
7 | foo-baz
8 | kung-foo
9 | xyz-xyz
10 | 123-xyz
结果:
occurrences | last_part | last_index_of
----------------------------------------
3 | bar | 6
2 | baz | 7
1 | boo | 5
2 | foo | 8
2 | xyz | 10