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
这是一种明智的做法吗?
注意:
有时会发生,在写这个问题时,我想我找到了前进的方向,但我还没有工作代码。稍后我将使用有效或需要帮助的代码更新问题。
同时,我感谢任何反馈、指示和建议的答案。
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 y
来n
次...
@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 查找值的最常见起始字母的主要内容,如果未能解决你的问题,请参考以下文章