Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查找一个国家中使用最多的语言_Mysql_Sql_Mysql Workbench - Fatal编程技术网

Mysql SQL查找一个国家中使用最多的语言

Mysql SQL查找一个国家中使用最多的语言,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我正在努力获得一个国家中使用率最高的语言。我加入了两个表格: Country(NAME,CODE) CountryLanguage(Percentage, CountryCode, Language) 加入这两个团队让我 Aruba Dutch 5.3 Aruba English 9.5 Aruba Papiamento 76.7 Aruba Spanish 7.4 Afghanist

我正在努力获得一个国家中使用率最高的语言。我加入了两个表格:

Country(NAME,CODE)
CountryLanguage(Percentage, CountryCode, Language)
加入这两个团队让我

Aruba           Dutch       5.3
Aruba           English     9.5
Aruba           Papiamento  76.7
Aruba           Spanish     7.4
Afghanistan     Balochi     0.9
Afghanistan     Dari        32.1
Afghanistan     Pashto      52.4
Afghanistan     Turkmenian  1.9
Afghanistan     Uzbek       8.8
我试图通过说来获得最多的口语

SELECT co.Name, cl.language, max(cl.Percentage)
from Country co, CountryLanguage cl
where co.Code = cl.CountryCode
group by co.Name
这给了我正确的百分比,但语言错误,我哪里做错了

Afghanistan  Balochi    52.4
Aruba        Dutch      76.7

只需通过两列添加组

SELECT co.Name, cl.language, max(cl.Percentage)
from Country co, CountryLanguage cl
where co.Code = cl.CountryCode
group by co.Name,cl.language

首先,请使用上的
内部连接…加入

您的查询将无法工作,因为它将获得最大值(百分比),但会显示给定
国家的
语言

如果我正确理解了您的模式,那么以下查询应该可以正常工作:

SELECT co.Name, cl.language, cl.Percentage as percentage
from Country co 
inner join CountryLanguage cl
on co.Code = cl.CountryCode
where (cl.CountryCode,cl.Percentage) in (select CountryCode,max(Percentage)
                                         from CountryLanguage
                                         group by CountryCode)
group by co.Name

您可以使用窗口功能获得以下答案:

RANK
使用
分区
就可以了

With RecordedPercentages AS
(
              Select 'Aruba' Country, 'Dutch' LanguageName, Cast (5.3 as float) Percentage
    Union All Select 'Aruba', 'English', 9.5
    Union All Select 'Aruba', 'Papiamento', 76.7
    Union All Select 'Aruba', 'Spanish', 7.4
    Union All Select 'Afghanistan', 'Balochi', 0.9
    Union All Select 'Afghanistan', 'Dari', 32.1
    Union All Select 'Afghanistan', 'Pashto', 52.4
    Union All Select 'Afghanistan', 'Turkmenian', 1.9
    Union All Select 'Afghanistan', 'Uzbek', 8.8
),
MyRanking As
(
    Select 
    Country, LanguageName, Percentage, 
    Rank() Over (Partition by Country Order by Percentage Desc) Ranking
    From RecordedPercentages
)
Select *
From MyRanking
Where Ranking = 1

按co.name、cl.language分组将获得所需的结果侧注使用正确的内部联接语法,而不是旧的逗号联接语法。@B house为每个国家提供多个输出,如果我这样做,它为每个国家提供多个输出,我的意思是它可以工作,注意解释where子句的工作原理吗?
where
子句将从联接表中选择具有一对
(CountryCode,max(Percentage))
的行。在您的查询中,您只选择了
max(Percentage)
,它将任意显示
语言,而不是带有
max(Percentage)的语言
您比大多数MySQL用户现在的位置稍微领先一点。