如何在 SQL 中找到列的模式?

pur*_*ppc 2 mysql sql

这是表及其值:

CREATE TABLE Weapon(id INT,
Name VARCHAR(80),
Style VARCHAR(80));

Insert into Weapon values (1, 'Seismic Wand', 'Magic');
Insert into Weapon values (2, 'Nox Bow', 'Ranged');
Insert into Weapon values (3, 'Drygore', 'Melee');
Insert into Weapon values (4, 'Chaotic Staff', 'Magic');
Insert into Weapon values (5, 'Staff of Darkness', 'Magic');
Insert into Weapon values (6, 'Tetsu Katana', 'Melee');
Run Code Online (Sandbox Code Playgroud)

这是我的查询尝试。

SELECT Name, Count(*) AS Style
FROM Weapon
GROUP BY Name
HAVING Count(*) >= ALL
   (SELECT Count(*)
   FROM Weapon
   GROUP BY Name);
Run Code Online (Sandbox Code Playgroud)

它不显示模式,Style列的最重复值。

结果

我如何使它显示模式?

pjd*_*pjd 6

更新:

为了回应@vkp 对多个Styles 可能是数据集模式的合理担忧,这里有一个更好的查询:

SELECT Style AS Mode, COUNT(*) AS Count 
FROM Weapon 
GROUP BY Style 
HAVING COUNT(*) >= ALL (SELECT COUNT(*) FROM Weapon GROUP BY Style);
Run Code Online (Sandbox Code Playgroud)

这产生:

模式 数数
魔法 3

这将返回数据集的模式,并将处理多个Styles 是模式的情况,而无需对结果进行目视检查。

例如,在原始表的基础上构建,

INSERT INTO Weapon 
VALUES (7, 'Rock', 'Melee');
Run Code Online (Sandbox Code Playgroud)

(增加“近战”的数量,以便与“魔法”并列)

如果我们运行新的模式查找查询,我们会得到以下结果:

模式 数数
魔法 3
近战 3

我发布的原始答案(保留在下面)将在表格顶部生成模式,并要求用户选择他们需要的值。在我看来,这个新解决方案效果更好。此外,我意识到最初我将“计数”列标记为“模式”,而实际上数据集的模式是样式的名称(魔术、近战等),而不是样式出现的次数。


原始答案:

对于 Style 列的模式,

SELECT Style, COUNT(*) AS Mode 
FROM Weapon 
GROUP BY Style 
ORDER BY COUNT(*) DESC;`
Run Code Online (Sandbox Code Playgroud)

产生:

风格 模式
魔法 3
近战 2
远程 1

模式将位于表格顶部。

感谢http://www.xarg.org/2012/07/statistical-functions-in-mysql/