mySQL找到最常见的值

时间:2018-01-04 06:43:18

标签: mysql

从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'/ LI>
  • 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>";

1 个答案:

答案 0 :(得分:3)

您可以使用此简单查询来实现

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