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