【问题标题】:mySQL find most common starting letter for valuesmySQL 查找值的最常见起始字母
【发布时间】: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 谢谢,会做 - 两者都投了赞成票,只是通过两者 - 谢谢

标签: mysql


【解决方案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

【讨论】:

  • 谢谢 :-) 这是两个答案之间的艰难选择,直到其中一个消失...是有价值的。
猜你喜欢
  • 2022-11-13
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 2023-01-05
相关资源
最近更新 更多