暂时想不出这个问题的更好的标题,但这里是我正在使用的数据集的样本:
Token Buyer Amount
---------------------------------------------------------------
F3D4A490-03C9-450E-873B-3B70E68FA65B Company B 1.50
F3D4A490-03C9-450E-873B-3B70E68FA65B Company C 0.99
A85677D8-C5A9-4766-8628-AADD769240C2 Company A 3.14
A85677D8-C5A9-4766-8628-AADD769240C2 Company B 2.44
FB72BEE1-194C-48D3-8EC1-669776E8924C Company C 2.01
E9FFACBF-F9B1-4278-B49D-42E605F21D28 Company B 1.25
我需要获取符合以下两个条件之一的令牌值列表:
在这种情况下,我想要的结果集将包含以下内容:
F3D4A490-03C9-450E-873B-3B70E68FA65B
FB72BEE1-194C-48D3-8EC1-669776E8924C
E9FFACBF-F9B1-4278-B49D-42E605F21D28
基于拥有单个令牌获取列表非常简单。我可以用一个HAVING COUNT(*)= 1做一个GROUP BY。这是给我带来麻烦的第二个条件。
此解决方案不考虑性能,这是我将要运行的一次性查询。
答案 0 :(得分:4)
SELECT Token
FROM TableName
GROUP BY Token
HAVING COUNT(*) = 1
UNION ALL
SELECT Token
FROM TableName
WHERE Token NOT IN
(
SELECT Token
FROM TableName
WHERE Buyer = 'Company A'
)
GROUP BY Token
HAVING COUNT(*) > 1