如何找到最流行的音乐类型?
Posted
技术标签:
【中文标题】如何找到最流行的音乐类型?【英文标题】:How to find most popular genre of music? 【发布时间】:2017-04-13 04:12:29 【问题描述】:所以我有两个表,表 1:Music Styles 包含具有 StyleID 和 StyleName 的字段,StyleName 是一种流派,表 2:entertainers 具有字段 SyleID 和 EntertainerID。
我需要帮助查找的是:
1) 艺人数据库中最受欢迎的音乐风格是什么?
这是我目前所拥有的:
SELECT StyleID, StyleName
from EA_Music_Styles
WHERE StyleID = (SELECT StyleID
from EA_Entertainer_Styles
WHERE StyleID = (SELECT MAX(StyleID)
FROM EA_Entertainer_Styles));
但我得到一个错误代码“子查询返回超过 1 行”
我需要帮助,不知道该怎么做?第一次初学者。
以下是表格: 表格1: 样式ID 样式N 1 40 年代的舞厅音乐 2 50 年代的音乐 3 60 年代的音乐 4 70 年代的音乐 5 80 年代音乐 6 国家 7 古典 8 经典摇滚 9说唱 10 当代 11 乡村摇滚 12 猫王 13 民间 14 室内乐 15 爵士乐 16 卡拉OK 17 摩城 18 现代摇滚 19 节奏与蓝调 20首秀曲 21个标准 22 首 40 首热门歌曲 23 品种 24 莎莎 25 90 年代音乐
表 2:
StyleID 艺人ID 3 1003 3 1008 4 1010 6 1007 6 1008 7 1009 7 1011 7 1012 8 1003 10 1001 10 1013 11 1007 13 1004 13 1012 14 1009 14 1011 15 1005 15 1013 17 1002 19 1002 19 1005 20 1001 20 1011 21 1001 21 1009 21 1010 22 1006 22 1010 23 1002 23 1006 24 1005 24 1006
所以结果会输出两个 StyleID,7 & 21 和 StyleName,这将是 Classical & Standards
【问题讨论】:
请记住,MAX 给出的是最大值而不是出现次数最多的值。要获得最常用的值,您必须进行分组和计数。 【参考方案1】:您只需加入您的两张桌子并获得最大数量的艺人
SELECT ms.StyleName, count(*) most_popular
from EA_Music_Styles ms
INNER JOIN A_Entertainer_Styles es
ON ms.StyleID = es.StyleID
group by ms.StyleName
order by 2 desc
limit 1
这将为您提供最流行的样式名称(我认为它是具有更多行的样式名称)。我计算了 StyleName 的出现次数,并对其进行排序,只得到第一个结果。
【讨论】:
【参考方案2】:这是解决问题的方法。
在您的艺人表用户组中按 StyleID 同时选择计数。这将为您提供 styleID 计数,您可以按降序排序并限制 1 以找到最受欢迎的
select StyleID, count(StyleID) c from EA_Entertainer_Styles
group by StyleID
order by c desc
limit 1;
现在使用第一步中的 styleID 从表 Music 中获取 StyleName。
select StyleName from EA_Music_Styles
where StyleID = id_from_step1
您可以在单个查询中使用这两个,方法是按照Jorge Campos 显示的答案将它们连接起来
【讨论】:
【参考方案3】:Max 为您提供数据库中最大的数字,而不是最常用的数字。您应该为此使用 count。
下一个例子应该给出正确的结果。
select StyleName from EA_Music_Styles
where StyleID = (
select StyleID
from EA_Entertainer_Styles
group by StyleID
order by count(StyleID) desc
limit 1)
【讨论】:
但这只显示 1 个 StyleName,应该有 2 个,如果我更改限制它会显示错误 您无法更改限制,因为您使用了“StyleID = (select...”。要保持这一点,您只能在第二个 select 语句中获得一个结果。要获取所有可能的值是平等的。你应该先得到最常用的 StyleID,然后是他们的名字,请等一下 select StyleName from EA_Music_Styles where StyleID in ( select b.StyleID from EA_Entertainer_Styles b group by b.StyleID with count(b.StyleID) =(select count(a.StyleID) from EA_Entertainer_Styles a group by a .StyleID order by a.StyleID limit 1) )以上是关于如何找到最流行的音乐类型?的主要内容,如果未能解决你的问题,请参考以下文章