在mysql表中计算和分组类似的字符串?

时间:2014-04-11 13:17:05

标签: php mysql regex

我有一个数据库表users,里面有很多名字和性别,我需要找到性别最常见的名字吗?

|      name      |   sex  |
----------------------------
|     Foo Bar    |  male  |
|     Foo Boq    |  male  |
|     Plo Boa    |  male  |
|     Loo Baa    | female |
|     Boo Faa    | female |
|     Boo Sar    | female |

我能想到的最好的东西是(例如男性)

SELECT  name, COUNT(*) totalCount
FROM    users WHERE sex='male'
GROUP   BY name
ORDER   BY totalCount DESC
LIMIT   1

我希望的结果是

Foo

之后我意识到并没有考虑到姓氏。这张表中有太多数据供我尝试分离数据(除非我能以相对简单的方式做到这一点?)

是否可以使用REGEX或'$name%'的某些排列(使用PHP运行查询!)

谢谢! : - )

1 个答案:

答案 0 :(得分:2)

您可以在SUBSTRING_INDEX(name,' ',1)中使用GROUP BY,因为名字列中的空格用名字列中的空格分隔,并在评论中由op确认

SELECT  name, COUNT(*) totalCount
FROM    table1
WHERE sex='male'
GROUP   BY SUBSTRING_INDEX(name,' ',1)
ORDER   BY totalCount DESC
LIMIT 1

Fiddle Demo