我正在尝试在Impala中执行SQL查询。我有一个数据表,其中(其中包括)两列的值相交多次。例如,假设我们有一个表,该表包含两列,用于显示相关名称和电话号码:
Names Phone NumbersJohn Smith (123) 456-7890Rob Johnson (123) 456-7890Greg Jackson (123) 456-7890Tom Green (123) 456-7890Jack Mathis (123) 456-7890John Smith (234) 567-8901Rob Johnson (234) 567-8901Joe Wolf (234) 567-8901Mike Thomas (234) 567-8901Jim Moore (234) 567-8901John Smith (345) 678-9012Rob Johnson (345) 678-9012Toby Ellis (345) 678-9012Sam Wharton (345) 678-9012Bob Thompson (345) 678-9012John Smith (456) 789-0123Rob Johnson (456) 789-0123Kelly Howe (456) 789-0123Hank Rehms (456) 789-0123Jim Fellows (456) 789-0123
我需要从此表中获得的是“名称”列中每个项目的选择,该项目具有与之关联的“电话号码”列中的多个条目,如下所示:
Names Phone NumbersJohn Smith (123) 456-7890John Smith (234) 567-8901John Smith (345) 678-9012John Smith (456) 789-0123Rob Johnson (123) 456-7890Rob Johnson (234) 567-8901Rob Johnson (345) 678-9012Rob Johnson (456) 789-0123
这是我到目前为止得到的查询,但是并不能完全满足我所寻找的结果:

SELECT a.name, a.phone_number, b.phone_number, b.count1

FROM databasename a

INNER JOIN (

  SELECT phone_number, COUNT(phone_number) as count1

  FROM databasename

  GROUP BY phone_number

  ) b

ON a.phone_number = b.phone_number;

关于如何改善查询以获取所需结果的任何想法?

谢谢。

最佳答案

正在处理您的查询...

这将按电话名称多于一个的用户名称生成一个子集,然后根据名称返回整个集合,并返回名称多于电话多于一个的用户的所有电话号码。但是,如果用户多次列出相同的电话号码,则会返回该电话号码。要消除这些(如果需要),请在内联 View 中为count添加与众不同。

SELECT a.name, a.phone_number
FROM databasename a
INNER JOIN (
  SELECT name, COUNT(phone_number) as count1
  FROM databasename
  GROUP BY name
  having  COUNT(phone_number) > 1
  ) b
on a.name = b.name
Order by a.name, a.phone_Number

关于sql - SQL查询:如何选择单个项目的多个实例而不折叠成一个组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31993841/

10-16 01:50