Sql 选择最大不同值
我有一个带有电话号码(字符串)和姓名(字符串)的数据库表 同一号码在不同行中可能有不同的名称 给定某个数字,我想选择最常用的名称 例如,给定以下数据,如果使用555.1234,我应该从查询中返回Sql 选择最大不同值,sql,Sql,我有一个带有电话号码(字符串)和姓名(字符串)的数据库表 同一号码在不同行中可能有不同的名称 给定某个数字,我想选择最常用的名称 例如,给定以下数据,如果使用555.1234,我应该从查询中返回 Number | Name ----------------- 555.1234 | Frank 555.1234 | Fran 555.1234 | James 555.1234 | Frank 555.1233 | Jesse 似乎我应该能够以某种方式将distinct和Max组合
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'
。然后您可能只想按名称分组。此查询是在假设数字未知的情况下创建的。如果知道的话,按照威尔金斯先生的建议去做。