计算其他值的计数= 1的不同值

时间:2016-03-25 19:35:01

标签: mysql sql

给出

------------------------------
|id | val1 | val2 | date     |
______________________________
1     10      2     1990-10-02
2     10      3     1990-10-02
3     1       1     1990-10-02
4     21      1     1990-10-02
5     30      3     1990-10-02
6     30      1     1990-10-02

我想在结果中得到id为3和4的行,因为如果按val1分组,它们只有一个val1。

如何实现这一目标? SELECT DISTINCT COUNT(*)WHERE

2 个答案:

答案 0 :(得分:2)

您可以使用group byhaving

select t.*
from t
group by val1
having count(*) = 1;

一般来说,我反对在select中使用非聚合列进行聚合查询。但是,在这种情况下它很好,因为count(*)保证只有一个匹配的行。

注意:这在其他数据库中不起作用。

答案 1 :(得分:1)

SELECT DISTINCT x.* 
           FROM my_table x 
           LEFT
           JOIN my_table y 
             ON y.id <> x.id AND y.val1 = x.val2
          WHERE y.id IS NULL;