选择最大不同值

时间:2011-03-02 20:59:30

标签: sql

我有一个数据库表,其中包含电话号码(字符串)和名称(字符串)

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

给定一定数量我想选择最常用的名称

例如,如果使用555.1234给出以下数据,我应该从查询Frank

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

似乎我应该能够以某种方式将distinct和Max结合起来,但是我无法想出正确的查询来执行此操作。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果您不知道将哪个电话号码传递给查询,那么您可以使用以下内容:

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

请告诉我这是否适合您!

答案 1 :(得分:1)

如果我理解了这个问题,你有一个特定的数字作为输入,那么这可能会起作用,具体取决于你使用的数据库。 Capsule的评论让我意识到可能不是这种情况。 编辑根据杰克的好评,更改为计数(*)(我认为)更清晰。

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