【问题标题】:Finding most common language per country, using subquery - T-SQL使用子查询查找每个国家/地区最常用的语言 - T-SQL
【发布时间】:2018-11-10 17:44:08
【问题描述】:

我是 SQL 的新手,因为我正在学习入门课程。我已经通读了我的教科书,并在网上查看了尽可能多的材料......

我有一个表 [Language],其中包括 Language.Country、Language.Name 和 Language.Percentage 列。 这是所有国家/地区、其中使用的语言以及使用每种语言的人的百分比的列表。

我的任务是使用子查询显示每个国家/地区最常用的语言。

我尝试过的一件事:

SELECT Country, MAX(Percentage) AS Percentage
FROM Language
GROUP BY Country;

这确实返回了正确的答案,但我无法显示与该百分比相对应的语言名称,而且我看不到如何使用子查询来获得正确的结果。这让我有点生气,tbh。

任何帮助将不胜感激。

【问题讨论】:

  • 你想如何处理领带?
  • @HABO 假设我有任何,这必然是 50/50 拆分,我怎么能强制查询显示两者?我已经运行了 Andrey Nikolov 提供的查询,我确实看到一个国家在百分比下列出了“50”,但只有一行。我将如何显示第二种语言?

标签: sql-server tsql subquery


【解决方案1】:

您的子查询应返回相应国家/地区最常用的语言,即按百分比降序返回第一行。

SELECT
    Country
    , MAX(Percentage) AS Percentage
    , (select top 1 Name from Language i where i.Country = l.Country order by Percentage desc) as MostCommonLanguage
FROM Language l
GROUP BY Country;

【讨论】:

  • 谢谢!现在更有意义了!你看,我没有意识到我可以以这种方式使用子查询,即作为我想要检索的列的一部分,列在 SELECT 子句之后,然后给出一个名称。我的印象是子查询需要在 WHERE 子句之后。我的老师和我的教科书都没有说清楚。
  • 如果我可以问一个额外的问题,因为它会帮助我理解这个查询在做什么:这是一个相关子查询的例子吗?换句话说,子查询是否从所有语言列表中选择前 1 个结果,对于外部查询评估的每个唯一“国家”值按百分比降序排列?呃,如果这有意义吗?
  • 相关子查询意味着它依赖于外部查询。在这种情况下,对于每一行,您返回的值取决于外部查询的国家/地区。如果两个查询之间没有依赖关系,它将不会相关,例如子查询返回全世界最常用的语言(即省略子查询的 where 子句),它将为每一行返回相同的值。
  • 所以,我很抱歉,澄清一下...这是一个相关子查询?还是不是?
  • (select top 1 Name from Language i where i.Country = l.Country order by Percentage desc) as MostCommonLanguage 是一个相关子查询,因为它根据外部查询中 Country 字段的值过滤结果。是的,是的。
猜你喜欢
  • 1970-01-01
  • 2019-06-24
  • 2021-12-04
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多