Thread: Arrays and count()

Arrays and count()

From
Mr M Pacey
Date:
I'm having difficulties formulating what I thought was a simple
query in 6.3.2. I have a table defined like this:

create table sentence
( typenum int4, wordpos int4, words text[], tags  text[]
);

What I'd like to do is, e.g. select all instances of tags[1] and
display the frequency values for each unique (distinct) entry.
The query I tried was:

select sentence.tags[1], count (*) from sentence group by
sentence.tags[1];

Which fails to parse. Trying to work backwards I try constructing a
related command:

select count (sentence.tags[1]) from sentence;

And am treated to the error message:

PQexec() -- Request was sent to backend, but backend closed the channel
before responding.       This probably means the backend terminated abnormally before or
while processing the request.

Is this a bug, or am I completely failing to understand one or more
of the concepts involved here?

Mike Pacey.


Re: [SQL] Arrays and count()

From
Tom Lane
Date:
Mr M Pacey <M.Pacey@liverpool.ac.uk> writes:
> select sentence.tags[1], count (*) from sentence group by
> sentence.tags[1];

> Which fails to parse.

Yes, I get 'Illegal use of aggregates or non-group column in target
list' with current sources.  Without having looked, my guess is that
the system is too dumb to realize that the same array element is being
named at both places (ie, it's not exploiting the fact that the
subscripts are constant).  Not sure how hard this might be to fix.

> select count (sentence.tags[1]) from sentence;
> PQexec() -- Request was sent to backend, but backend closed the channel
> before responding.

Still crashes in 6.5-current :-(.  Will look into it.

As a workaround, you could probably select the tag data into a temporary
table and then do the group by on the temp table...
        regards, tom lane