SQL:返回多个匹配的记录

时间:2016-11-06 06:03:09

标签: sql amazon-redshift

我有一个表,我想返回有多个BSID的记录。

示例:

layout

问题:

如何仅返回此特定个人有三个不同客户ID的底部三个?

我试过写

FirstName   LastName   CustomerID
A           Apple      12345
AB          Orange     12451
AC          Durian     44123
BODY        SHOP       11223
BODY        SHOP       11224
BODY        SHOP       11225

但结果会返回所有6行。

2 个答案:

答案 0 :(得分:0)

一个选项是使用您已编写的子查询来识别要保留的名字/姓氏对,然后将其连接回主表。

SELECT t1.*
FROM Profile t1
INNER JOIN
(
    SELECT FirstName, Lastname, BSID
    FROM Profile
    GROUP BY FirstName, Lastname, BSID
    HAVING COUNT(*) > 1
) t2
    ON t1.Firstname = t2.Firstname AND
       t1.Lastname = t2.Lastname   AND
       t1.BSID = t2.BSID

答案 1 :(得分:0)

在Amazon Redshift中,如果您在 group by 子句中也包含 BIS ,则它将返回所有值。由于使用BIS分组,因此没有重复记录。下面是您将收到的结果集,

FirstName   LastName   CustomerID   Count
A           Apple      12345        1    
AB          Orange     12451        1
AC          Durian     44123        1
BODY        SHOP       11223        1
BODY        SHOP       11224        1
BODY        SHOP       11225        1

你正在检查条款中的条件作为计数(*)>所以所有行都满足这个条件。

但您所需的结果如下所示,

FirstName   LastName   Count
A           Apple      1    
AB          Orange     1
AC          Durian     1
BODY        SHOP       3

因此您必须修改您的查询,如下所示

select Firstname, lastname, count(*)
from table Profile
group by firstname, lastname
having count(*) > 1

只需从“选择”和“分组依据”条款中删除BIS。

希望这可以解决你的问题。