2016-03-25 36 views
0

鉴于计数不同的值,其中另一个值的数量= 1

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

+0

那么最后两列是不相关的? – Strawberry

+1

请显示你想要的结果。 –

回答

2

您可以使用group byhaving此:

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

一般情况下,我反对一个具有与select未聚集列的聚集查询。但是,这种情况很好,因为count(*)保证只有一个匹配的行。

注意:这不适用于其他数据库。

+0

你的答案几乎是我需要的。我在laravel 其中('created_at','like',$ today。“%”) - > distinct('ip') - > count('ip'); https://jsfiddle.net/L7zpgbku/ - 这里是表格。我想用这个查询来获得跳出率 –

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;