我知道有人在这里已经问了类似的问题。但是,如果多行具有相同的属性,大多数人仍希望返回第一行或最后一行。对于我的情况,我想简单地丢弃具有相同特定属性的行。
例如,我有一个像这样的玩具数据集:
gender age name
f 20 zoe
f 20 natalia
m 39 tom
f 20 erika
m 37 eric
m 37 shane
f 22 jenn
我只希望在gender
和age
上区分,然后丢弃所有行,如果这两个属性返回:
gender age name
m 39 tom
f 22 jenn
答案 0 :(得分:2)
您可以使用count
的窗口(分析)变体来查找只有一个性别/年龄组合出现的行:
SELECT gender, age, name
FROM (SELECT gender, age, name, COUNT(*) OVER (PARTITION BY gender, age) AS cnt
FROM mytable) t
WHERE cnt = 1
答案 1 :(得分:1)
在CTE中使用HAVING
子句。
;WITH DistinctGenderAges AS
(
SELECT gender
,age
FROM YourTable
GROUP BY gender
,age
HAVING COUNT(*) = 1
)
SELECT yt.gender, yt.age, yt.name
FROM DistinctGenderAges dga
INNER JOIN YourTable yt ON dga.gender = yt.gender AND dga.age = yt.age
答案 2 :(得分:-1)
无论如何,您必须告诉数据库要为名称选择哪个值。如果您不在乎,一个简单的解决方案是分组:
SELECT gender, age, MIN(name) as name FROM mytable GROUP BY gender, age HAVING COUNT(*)=1
您可以使用任何有效的聚合作为名称,但您必须选择一些内容。