Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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
Sql 选择最大不同值_Sql - Fatal编程技术网

Sql 选择最大不同值

Sql 选择最大不同值,sql,Sql,我有一个带有电话号码(字符串)和姓名(字符串)的数据库表 同一号码在不同行中可能有不同的名称 给定某个数字,我想选择最常用的名称 例如,给定以下数据,如果使用555.1234,我应该从查询中返回 Number | Name ----------------- 555.1234 | Frank 555.1234 | Fran 555.1234 | James 555.1234 | Frank 555.1233 | Jesse 似乎我应该能够以某种方式将distinct和Max组合

我有一个带有电话号码(字符串)和姓名(字符串)的数据库表

同一号码在不同行中可能有不同的名称

给定某个数字,我想选择最常用的名称

例如,给定以下数据,如果使用555.1234,我应该从查询中返回

Number   |  Name
-----------------
555.1234 |  Frank
555.1234 |  Fran
555.1234 |  James
555.1234 |  Frank
555.1233 |  Jesse

似乎我应该能够以某种方式将distinct和Max组合起来,但我无法提出正确的查询来实现这一点。有什么想法吗?

根据我的理解,如果您有一个特定的数字作为输入,那么这可能会根据您使用的数据库而起作用。胶囊的评论让我意识到情况可能并非如此Edit更改为Count(*),以便(我认为)基于杰克的好评论,更清晰

select Top 1 Name, Count(*) total 
   from phone where number = '555.1234' 
   group by name 
   order by total desc

如果您不知道要传递到查询中的电话号码,则可以使用以下选项:

SELECT Number, Name, COUNT(Name) AS NameCount
FROM test
GROUP BY Number, Name
HAVING NameCount > 1
Order BY NameCount DESC
LIMIT 1
这将通过一个名字为您提供最常用的电话号码,并返回电话、姓名和计数

下面是我用来尝试查询的
test
表及其值:

Number   | Name
555.1234 | Frank
555.1234 | Fran
555.1234 | James
555.1234 | Frank
555.1234 | Jesse
555.2234 | Frank
555.1234 | Jesse
555.1234 | Frank

让我知道这是否对你有效

你使用的是什么数据库系统?我相信它的mysql,它实际上是在一个web服务api后面。如果不是mysql,那也是IBM.Nice解决方案如果你知道你要找的电话号码,就避免先按号码分组。@Capsule:我在读这个问题,因为这是一个条件。。。但我很可能错了。你说得很好。不,我认为你是对的,我也理解这是一个条件。我是在评论你的解决方案和jonwayne的解决方案。你们都应该被接受;-)我确实知道我想要匹配名字的数字,因为它似乎计算了一个数字在表中出现的总次数,并根据该次数排序。我想计算一个特定数字的名称在表中出现的次数,并为该数字选择最常出现的名称(或包含该名称的行)。您将如何指定需要此信息的数字?只需添加where子句即可。您可以在FROM声明后添加
WHERE Number='xxxxxxx'
。然后您可能只想按名称分组。此查询是在假设数字未知的情况下创建的。如果知道的话,按照威尔金斯先生的建议去做。