Sql 选择元组数最少的国家/地区

Sql 选择元组数最少的国家/地区,sql,sql-server,Sql,Sql Server,目前,我正在尝试针对他们的示例数据库提交我自己的SQL查询,以便更好地使用SQL。我要做的是从Customer中选择具有最少元组数的所有国家。以下是我的查询尝试: SELECT a.Country FROM [Customer] a, (SELECT COUNT(*) AS Tot FROM [Customer] GROUP BY Country) b GROUP BY a.Country HAVING COUNT(*) = MIN(b.Tot) 但是,该网站返回一个空表,而不是正确的结果,即

目前,我正在尝试针对他们的示例数据库提交我自己的SQL查询,以便更好地使用SQL。我要做的是从Customer中选择具有最少元组数的所有国家。以下是我的查询尝试:

SELECT a.Country
FROM [Customer] a, (SELECT COUNT(*) AS Tot
FROM [Customer]
GROUP BY Country) b
GROUP BY a.Country
HAVING COUNT(*) = MIN(b.Tot)
但是,该网站返回一个空表,而不是正确的结果,即爱尔兰、挪威、波兰。通过按国家对表格进行分组并使用COUNT*,然后查看所有COUNT*值中COUNT*值最小的国家,可以轻松获得正确的结果。我想了解一些关于如何在不对表格数据进行任何假设的情况下生成正确结果的建议。

我会使用“选择带领带的TOP 1”来完成此操作:

注二:

使用表别名时,将其作为表的缩写。这使得查询更容易理解。 请勿在FROM子句中使用逗号。始终使用正确的显式联接语法。 我会使用“选择带领带的TOP 1”:

注二:

使用表别名时,将其作为表的缩写。这使得查询更容易理解。 请勿在FROM子句中使用逗号。始终使用正确的显式联接语法。
又一次从戈登·林诺夫那里学到了一些新东西

这里是我的解决方案,没有它

Select a.Country from [Customer] a
group by a.Country
having count(*) =  (select min(b.Tot) from  (SELECT COUNT(*) AS Tot FROM [Customer] GROUP BY Country) b)

又一次从戈登·林诺夫那里学到了一些新东西

这里是我的解决方案,没有它

Select a.Country from [Customer] a
group by a.Country
having count(*) =  (select min(b.Tot) from  (SELECT COUNT(*) AS Tot FROM [Customer] GROUP BY Country) b)

如果您没有使用sql 2012

声明@less int=2 ;以CTE为例 选择c* ,行号按国家ID按客户订单划分DRN 来自dbo.C

从cte中选择*
其中rn如果不使用sql 2012

声明@less int=2 ;以CTE为例 选择c* ,行号按国家ID按客户订单划分DRN 来自dbo.C

从cte中选择*
带TIES c.Country part的TOP 1在哪里声明了什么?它说查看order by子句并返回它指定的第一行。然后,在按键排序与第一行相同的情况下继续返回行。ASC部分是否与返回正确的国家/地区集相关?当然,使用DESC,您将获得具有最多国家/地区的国家/地区entries@MånsNilsson。您可以省略ASC,但需要ORDER BY。带TIES c的前1个国家/地区部分说明了什么?它表示查看ORDER BY子句并返回指定的第一行。然后,在按键排序与第一行相同的情况下继续返回行。ASC部分是否与返回正确的国家/地区集相关?当然,使用DESC,您将获得具有最多国家/地区的国家/地区entries@MånsNilsson。你可以省略ASC,但需要ORDER BY。这个解决方案也是正确的,但是它需要3个SELECT和几个嵌套的括号来进行SELECT,并且在代码长度方面不是最好的。我同意,Gordon的解决方案要好得多。这个解决方案也是正确的,但是它需要3个选择和几个嵌套的括号来选择,并且在代码长度方面不是最好的。我同意,Gordon的解决方案要好得多