区别于SQL中的特定列

时间:2018-01-10 21:35:52

标签: sql sql-server select distinct

我知道有人在这里已经问了类似的问题。但是,如果多行具有相同的属性,大多数人仍希望返回第一行或最后一行。对于我的情况,我想简单地丢弃具有相同特定属性的行。

例如,我有一个像这样的玩具数据集:

gender age  name
  f     20   zoe
  f     20   natalia
  m     39   tom
  f     20   erika 
  m     37   eric
  m     37   shane
  f     22   jenn

我只希望在genderage上区分,然后丢弃所有行,如果这两个属性返回:

gender age  name
  m     39   tom
  f     22   jenn

3 个答案:

答案 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

您可以使用任何有效的聚合作为名称,但您必须选择一些内容。