Re: window function help - Mailing list pgsql-general

From David Johnston
Subject Re: window function help
Date
Msg-id 1396546115682-5798565.post@n5.nabble.com
Whole thread Raw
In response to Re: window function help  (Andy Colson <andy@squeakycode.net>)
List pgsql-general
Andy Colson wrote
> On 4/3/2014 11:09 AM, David Johnston wrote:
>> Andy Colson wrote
>>> On 4/3/2014 10:27 AM, Schnabel, Robert D. wrote:
>>>> I'm trying to figure out how to count the number of rows within a fixed
>>>> range of the current row value.  My table looks like this:
>>>>
>>>> SELECT chr_pos
>>>> FROM mutations_crosstab_9615_99
>>>> WHERE bta = 38
>>>> LIMIT 10
>>>>
>>>> chr_pos
>>>> 138
>>>> 140
>>>> 163
>>>> 174
>>>> 187
>>>> 187
>>>> 188
>>>> 208
>>>> 210
>>>> 213
>>>>
>>>
>>> This is the answer I got, which is different than yours, but I think its
>>> right.
>>>
>>>
>>>    chr_pos | count
>>> ---------+-------
>>>        138 |     2
>>>        140 |     2
>>>        163 |     2
>>>        174 |     4
>>>        187 |     3
>>>        188 |     4
>>>        208 |     5
>>>        210 |     4
>>>        212 |     4
>>>        213 |     4
>>> (10 rows)
>>
>> Same concept as mine - but I'm not sure where the "212" came from and you
>> did not duplicate the "187" that was present in the original.
>>
>> The OP wanted to show the duplicate row - which yours does and mine does
>> not
>> - but depending on how many duplicates there are having to run the same
>> effective query multiple times knowing you will always get the same
>> result
>> seems inefficient.  Better to query over a distinct set of values and
>> then,
>> if needed, join that back onto the original dataset.
>>
>> David J.
>>
>
>
>
>  > Same concept as mine - but I'm not sure where the "212" came from and
> you
>  > did not duplicate the "187" that was present in the original.
>
> Ah, data entry error.  I didn't even notice.  Oops.
>
>  > The OP wanted to show the duplicate row - which yours does and mine
> does not
>
> Did you post a sql statement?  I didn't seem to get it.
>
>  > - but depending on how many duplicates there are having to run the same
>
> Agreed.  If there are a lot of dups, we could probably speed this up.
>
> -Andy

My original seems to be held up for some reason...

Let me try again:

WITH val (value) AS (
VALUES (138),(140),(163),(174),(187),(187),(188),(208),(210),(213)
)
SELECT value, (SELECT count(*) FROM val AS valcheck WHERE valcheck.value
BETWEEN src.value - 20 AND src.value + 20)
FROM (
SELECT DISTINCT value FROM val
) src
ORDER BY 1;




--
View this message in context: http://postgresql.1045698.n5.nabble.com/window-function-help-tp5798526p5798565.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.


pgsql-general by date:

Previous
From: Rob Sargent
Date:
Subject: Re: COPY v. java performance comparison
Next
From: Andy Colson
Date:
Subject: Re: COPY v. java performance comparison