select + select Frage

select + select Frage

am 17.01.2008 21:41:15 von Kay Schulz

Hallo zusammen,

ich habe mehrere selects addiert, aber jetzt ist es so kompliziert,
dass ich es nicht hinbekomme.
Ich habe es letztens schon mal gepostet aber
vielleicht in keiner lesbaren Form.

Ich bin bis zu zwei einzelnen Statements gekommen. Die will ich
im Prinzip addieren (besser gesagt, Statement 1 mal 2 + Statement 2).
Wie mache ich das?
Auch sonstige Vereinfachungen sind willkommen.

Statement 1:
select sum(wert) +
(select COALESCE(sum(case when reinraus='in' then wert else -wert
end), 0)
from GV where W='E' and month(datum)=month(curdate()))
from KS where W='E' and month(datum)=month(curdate());

Statement 2:
select sum(wert) +
(select COALESCE(sum(case when reinraus='in' then wert else -wert
end), 0)
from GV where W='C' and month(datum)=month(curdate()))
from KS where W='C' and month(datum)=month(curdate());

Kay

Re: select + select Frage

am 18.01.2008 11:37:15 von B.Steinbrink

On Thu, 17 Jan 2008 21:41:15 +0100, Kay Schulz wrote:

> Hallo zusammen,
>
> ich habe mehrere selects addiert, aber jetzt ist es so kompliziert, dass
> ich es nicht hinbekomme.
> Ich habe es letztens schon mal gepostet aber vielleicht in keiner
> lesbaren Form.
>
> Ich bin bis zu zwei einzelnen Statements gekommen. Die will ich im
> Prinzip addieren (besser gesagt, Statement 1 mal 2 + Statement 2). Wie
> mache ich das?

Statements addieren?! Was soll das sein? SELECT 'foo' + SELECT 'bar' ist
dann SELECT 'foo' UNION SELECT 'bar'? Oder vllt. SELECT (SELECT 'foo'),
(SELECT 'bar')? Oder gar SELECT CONCAT('foo', 'bar')?

> Auch sonstige Vereinfachungen sind willkommen.
>
> Statement 1:
> select sum(wert) +
> (select COALESCE(sum(case when reinraus='in' then wert else -wert
> end), 0)
> from GV where W='E' and month(datum)=month(curdate()))
> from KS where W='E' and month(datum)=month(curdate());
>
> Statement 2:
> select sum(wert) +
> (select COALESCE(sum(case when reinraus='in' then wert else -wert
> end), 0)
> from GV where W='C' and month(datum)=month(curdate()))
> from KS where W='C' and month(datum)=month(curdate());

Meine Glaskugel sagt du willst nur ein Statement in dem irgendwas steht
wie:

SUM((CASE WHEN W='E' THEN 2 ELSE 1 END) * (CASE WHEN reinraus...)

(bei E wird verdoppelt, sonst nicht)

und

WHERE W IN ('C', 'E')

E und C raussuchen.

Das dann ne Gesamtsumme rauskommt ergibt sich von allein.

Wobei das natürlich nicht die Statements addiert oder multipliziert,
sondern nur die zurückgelieferten Skalarwerte, aber was besseres hatte
mein Kügelchen nicht zu liefern...

Björn

Re: select + select Frage

am 18.01.2008 20:53:59 von Kay Schulz

>
> Statements addieren?! Was soll das sein? SELECT 'foo' + SELECT 'bar' ist
> dann SELECT 'foo' UNION SELECT 'bar'? Oder vllt. SELECT (SELECT 'foo'),
> (SELECT 'bar')? Oder gar SELECT CONCAT('foo', 'bar')?

beide Statements liefern Zahlen zurück.
diese will ich addieren (mathematisch)
Sorry für die Unklarheit, ich dachte der Ausdruck sum(Wert)
hätte das impliziert

>
> Meine Glaskugel sagt du willst nur ein Statement in dem irgendwas steht
Ich will nur eine Zahl haben.
Und das geht vielleicht ja nur in einem Statement

> wie:
>
> SUM((CASE WHEN W='E' THEN 2 ELSE 1 END) * (CASE WHEN reinraus...)
>
> (bei E wird verdoppelt, sonst nicht)
>
> und
>
> WHERE W IN ('C', 'E')
>
> E und C raussuchen.
>
> Das dann ne Gesamtsumme rauskommt ergibt sich von allein.
OK, ich verstehe es so auf Anhieb nicht, aber ich werde damit
mal rumspielen

>
> Wobei das natürlich nicht die Statements addiert oder multipliziert,
> sondern nur die zurückgelieferten Skalarwerte, aber was besseres hatte
> mein Kügelchen nicht zu liefern...
>
> Björn

Danke auf jeden Fall

Kay

Re: select + select Frage

am 19.01.2008 10:08:37 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: select + select Frage

am 19.01.2008 21:28:29 von Kay Schulz

> select x.a+y.b from
> (select sum(15) as a from (select 1 as bar) foo where bar=1) x,
> (select sum(25) as b from (select 1 as bar) foo where bar=1) y;
> ?column?
> ----------
> 40
>
>
> Die inneren Selects, die x bzw. y liefern, paßt Du mit Deinen Selects
> an.
>
D A N K E

So geht es genau so wie ich will.
du hast mir sehr geholfen
kay