Thread: [SQL] Subselect has too many or too few fields

[SQL] Subselect has too many or too few fields

From
Oleg Bartunov
Date:
I have a problem with query I thought must works:

c_flats=> select source, max(up_date) as max_update, count(*) from flats where u
up_date in (select max(up_date) from flats group by source) group by source;
ERROR:  parser: Subselect has too many or too few fields.

Internal subselect produces as expected:
c_flats=> select max(up_date) from flats group by source;
       max
----------
15-03-1999
11-03-1999
24-03-1999
24-03-1999
24-03-1999


And I don't see a reason  my query doesn't works.
If I substite the result of internal subselect I get what I need (there are
cyrillic characters in <source>)

c_flats=> select source, max(up_date) as max_update, count(*) from flats where u
p_date in ('15-03-1999','11-03-1999','24-03-1999','24-03-1999','24-03-1999') gro
up by source;
source                    |max_update|count
--------------------------+----------+-----
ИНКОМ 369-00-25, 365-10-38|15-03-1999|  674
Корнет 912-00-12          |11-03-1999|   47
МИАН 974-62-62            |24-03-1999|  393
МИЭЛЬ 217-30-20, 217-39-13|24-03-1999|    1
МЦБН <null>               |24-03-1999|  141
(5 rows)

    Regards,
        Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83


RE: [SQL] Subselect has too many or too few fields

From
"Jackson, DeJuan"
Date:
What are the results without the subselect?
It looks like they will be what you are after.

The problem is that you are grouping by a column that isn't in your
specified result set.  The way PostgreSQL deals with this little problem is
by adding it to the retrieved rows, then using it in the group by and
aggregating.  Then just not displaying it on the print.
    DEJ

> -----Original Message-----
> From: Oleg Bartunov [mailto:oleg@sai.msu.su]
> Sent: Thursday, March 25, 1999 10:53 AM
> To: pgsql-sql@postgreSQL.org
> Subject: [SQL] Subselect has too many or too few fields
>
>
> I have a problem with query I thought must works:
>
> c_flats=> select source, max(up_date) as max_update, count(*)
> from flats where u
> up_date in (select max(up_date) from flats group by source)
> group by source;
> ERROR:  parser: Subselect has too many or too few fields.
>
> Internal subselect produces as expected:
> c_flats=> select max(up_date) from flats group by source;
>        max
> ----------
> 15-03-1999
> 11-03-1999
> 24-03-1999
> 24-03-1999
> 24-03-1999
>
>
> And I don't see a reason  my query doesn't works.
> If I substite the result of internal subselect I get what I
> need (there are
> cyrillic characters in <source>)
>
> c_flats=> select source, max(up_date) as max_update, count(*)
> from flats where u
> p_date in
> ('15-03-1999','11-03-1999','24-03-1999','24-03-1999','24-03-1999') gro
> up by source;
> source                    |max_update|count
> --------------------------+----------+-----
> ИНКОМ 369-00-25, 365-10-38|15-03-1999|  674
> Корнет 912-00-12          |11-03-1999|   47
> МИАН 974-62-62            |24-03-1999|  393
> МИЭЛЬ 217-30-20, 217-39-13|24-03-1999|    1
> МЦБН <null>               |24-03-1999|  141
> (5 rows)
>
>     Regards,
>         Oleg
> _____________________________________________________________
> Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
> Sternberg Astronomical Institute, Moscow University (Russia)
> Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
> phone: +007(095)939-16-83, +007(095)939-23-83
>
>