【发布时间】: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 y来n次... -
@YashParekh - 超出了我的需求范围,因为我已经知道如何处理这种情况,谢谢
-
@SlowLearner 请检查我的更新答案...
-
@Kirit 谢谢,会做 - 两者都投了赞成票,只是通过两者 - 谢谢
标签: mysql