Maybe a bug with SQL processor

From: Charles <charles(at)psmi(dot)com(dot)br>
To: pgsql-sql(at)postgresql(dot)org
Subject: Maybe a bug with SQL processor
Date: 1999-06-15 18:01:50
Message-ID: 3.0.6.32.19990615150150.00797960@10.0.0.67
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

It seems to be a problem with PostgreSQL 6.5 beta ...

I have the following tables:

CREATE TABLE levels
(
levelstr char(40) PRIMARY KEY,
title char(50)
);

CREATE TABLE entries
(
code int4 PRIMARY KEY,
levelstr char(40),
value float
);

Tables' records are:

INSERT INTO levels VALUES ('0001','level one');
INSERT INTO levels VALUES ('00010001','level one.one');
INSERT INTO levels VALUES ('00010002','level one.two');
INSERT INTO levels VALUES ('000100020001','level one.two.one');
INSERT INTO levels VALUES ('00010003','level one.three');
INSERT INTO levels VALUES ('0002','level two');
INSERT INTO levels VALUES ('00020001','level two.one');
INSERT INTO levels VALUES ('00020002','level two.two');
INSERT INTO levels VALUES ('0003','level three');

INSERT INTO entries VALUES (1,'000100020001',50.50);
INSERT INTO entries VALUES (2,'000100020001',149.50);
INSERT INTO entries VALUES (3,'00020002',100);
INSERT INTO entries VALUES (4,'00020002',-99.99);
INSERT INTO entries VALUES (5,'00010001',50);

I have to compute the sum of each "value" (in "entries" table)
which correspond to each "levelstr" (in "levels" table),
Every "value" that sums to a "levelstr", also sums to your parent "levelstr"
on query.

For example, "000100020001" has "00010002" as your parent, which, by your
turn,
has the "0001" as your parent, then the entry values 50.50 plus 149.50 adds
200
to "000100020001", "00010002" and "0001".

Thus, I expect the following query result:

+--------------+-----------+
| levelstr | level_sum |
+--------------+-----------+
| 0001 | 250 |
| 00010001 | 50 |
| 00010002 | 200 |
| 000100020001 | 200 |
| 00010003 | |
| 0002 | 0,01 |
| 00020001 | |
| 00020002 | 0,01 |
| 0003 | |
+--------------+-----------+

To make this query I've tried...

CREATE FUNCTION level_sum(bpchar) RETURNS float AS '
SELECT sum(value) FROM entries
WHERE levelstr LIKE $1 || ''%'';'
LANGUAGE 'sql';

SELECT levelstr, level_sum(levelstr) FROM levels;

But the result set was:

+--------------+-----------+
| levelstr | level_sum |
+--------------+-----------+
| 0001 | |
| 00010001 | 50 |
| 00010002 | |
| 000100020001 | 200 |
| 00010003 | |
| 0002 | |
| 00020001 | |
| 00020002 | 0,01 |
| 0003 | |
+--------------+-----------+

also look this...

SELECT level_sum('0001');
+-----------+
| level_sum |
+-----------+
| 250 |
+-----------+--> level_sum is correctly evaluated!

and...

SELECT levelstr, level_sum( levelstr ) FROM levels WHERE levelstr='0001';
+--------------+-----------+
| levelstr | level_sum |
+--------------+-----------+
| 0001 | |
+--------------+-----------+--> level_sum is incorrect!

WHAT IS WRONG?

I've tried many other possibilities to take this query work,
but I had no success!

CAN YOU HELP ME?

Thanks a lot!

Charles Roberto Stempniak
charles(at)psmi(dot)com(dot)br

Browse pgsql-sql by date

  From Date Subject
Next Message Brook Milligan 1999-06-15 19:11:52 Re: [SQL] example of trigger to track DB changes
Previous Message Collin F. Lynch 1999-06-15 18:00:54