我正在尝试在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/