Группировать и агрегировать значения - PullRequest
1 голос
/ 04 октября 2011
 Id       User Val1 Val2
 11910115 Fred 123 -0.000137
 11910116 Fred 456 0
 11910117 Fred 789 0.0002
 11910118 Sue 101 8.7E-05
 11910119 Sue 102 0.000125
 11910120 Sue 103 0

Намерение:

Select Id,User,Val1,Max(abs(val2)) val2
From MyTable
Group By User

То, что я ищу, это:

11910117 Fred 789 0.0002
11910119 Sue 102 0.000125

Я бы согласился:

11910117 0.0002
11910119 0.000125

Однако я не могу обойти 'неверно в списке выбора, потому что оно не содержится ни в совокупности ...'

Ответы [ 5 ]

1 голос
/ 05 октября 2011
SELECT y.Id, y.User, y.Val1, t.MaxVal
    FROM YourTable y
        INNER JOIN (SELECT User, MAX(ABS(val2)) AS MaxVal
                        FROM YourTable
                        GROUP BY User) t
            ON y.User = t.User
                AND ABS(y.Val2) = t.MaxVal
    WHERE y.User = 'Fred'
1 голос
/ 05 октября 2011

Каждое поле, которое не является агрегированным, должно появляться в группе по. Итак, если вы хотите агрегировать val1:

Select Id, User, max(Val1) val1, max(abs(val2)) val2
From MyTable
Group By Id, User
0 голосов
/ 05 октября 2011
select Id,
       [User],
       Val1,
       Val2
from (
      select Id,
             [User],
             Val1,
             Val2,
             row_number() over(partition by [User] order by abs(Val2) desc) as rn
      from YourTable
      -- where ... goes here
     ) as T
where rn = 1

http://data.stackexchange.com/stackoverflow/q/114300/

0 голосов
/ 05 октября 2011

Дайте этому попытку

SELECT t.id, t.user, t.val1, t.val2
FROM mytable t
    INNER JOIN
        (SELECT user, MAX(ABS(val2)) AS max
        FROM mytable
        GROUP BY user) q ON t.user = q.user AND ABS(t.val2)=q.max

Не уверен, насколько эффективно это будет на вашем столе.

0 голосов
/ 05 октября 2011
select Id, User, Val1, Val2
from MyTable t1
where not exists
(
   select * 
   from MyTable t2
   where t2.Id != t1.Id
   and   t2.User = t1.User
   and   abs(t2.Val2) > abs(t1.Val2) 
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...