mySQL 查找值的最常见起始字母

Posted

技术标签:

【中文标题】mySQL 查找值的最常见起始字母【英文标题】:mySQL find most common starting letter for values 【发布时间】:2018-06-13 20:55:47 【问题描述】:

我想从一个 mySQL 表中确定最常见的起始字母;例如,如果列表是:

天 书 猫 狗 苹果

预期结果最终会让我确定:

'd' 是最常见的起始字母 'd' 的计数为 2

有没有办法在不运行 26 个查询的情况下做到这一点,例如:

WHERE myWord LIKE 'a%' 
WHERE myWord LIKE 'b%' 
...
WHERE myWord LIKE 'y%' 
WHERE myWord LIKE 'z%' 

我发现了这个SO question,这让我觉得我可以分两步完成:

如果我没记错的话,方法是首先使用SO Answer 中的方法构建所有首字母的列表,如下所示:

SELECT DISTINCT LEFT(word_name, 1) as letter, word_name
FROM word
 GROUP BY (letter)
 ORDER BY letter

我希望它看起来像:

一个 b c d d

... 然后查询该列表。为此,我会按照 SO question 将新列表存储为临时表,类似于:

CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)

并根据 SO question 查询 Magnitude,类似于。

SELECT column, COUNT(*) AS magnitude 
FROM table 
GROUP BY column 
ORDER BY magnitude DESC
LIMIT 1

这是一种明智的做法吗?


注意:

有时会发生,在写这个问题时,我想我找到了前进的方向,但我还没有工作代码。稍后我将使用有效或需要帮助的代码更新问题。

同时,我感谢任何反馈、指示和建议的答案。

最后,我为此使用了 php、PDO、mysql

TIA


值得一提的是,有一个更简单的方法,这就是我最终得到的结果,感谢两位花时间回答的人:

$stmt_common2 = $pdo->prepare('SELECT COUNT(*) as occurence,SUBSTRING(word,1,1) as letter
FROM words 
GROUP BY SUBSTRING(word,1,1)
ORDER BY  occurence DESC, letter ASC 
LIMIT 1');
$stmt_common2->execute();   
$mostCommon2 = $stmt_common2->fetchAll();       
echo "most common letter: " . $mostCommon2[0]['letter'] . " occurs " . $mostCommon2[0]['occurence'] . " times)<br>";

【问题讨论】:

如果多个字母出现的次数相等怎么办?喜欢x and yn 次... @YashParekh - 超出了我的需求范围,因为我已经知道如何处理这种情况,谢谢 @SlowLearner 请检查我的更新答案... @Kirit 谢谢,会做 - 两者都投了赞成票,只是通过两者 - 谢谢 【参考方案1】:

您可以通过使用这个简单的查询来实现

SELECT COUNT(*) as occurence,SUBSTRING(word_name,1,1) as letter
FROM word 
GROUP BY SUBSTRING(word_name,1,1)
ORDER BY  occurence DESC, letter ASC 
LIMIT 1

【讨论】:

谢谢 :-) 这是两个答案之间的艰难选择,直到其中一个消失...是有价值的。

以上是关于mySQL 查找值的最常见起始字母的主要内容,如果未能解决你的问题,请参考以下文章

二分查找

在 sas 中查找包含字母数字值的字符串

常见算法之二分查找

在PHP中查找总和的最接近值的算法

运算符号

MySQL数据库索引常见问题