|
| Udtræk af samlet antal Fra : Arvid Mærsk |
Dato : 22-05-03 13:29 |
|
I følgende eksempel
sp1 sp2
navn1 Ja Ja
navn2 Ja Nej
navn3 Nej Nej
navn4 Ja
navn5 Nej Ja
Svaret i begge kolonner kan være Ja, Nej eller ikke udfyldt.
Jeg er interesseret i hvor mange der har svaret Ja og kan snildt
udtrække antallet af Ja i sp1 og sp2 hver for sig h.h.v. 2 og 3.
Men hvordan udtrækker jeg det samlede antal Ja (5) i MySQL?
--
AM
| |
Henrik Stidsen (22-05-2003)
| Kommentar Fra : Henrik Stidsen |
Dato : 22-05-03 15:11 |
|
Arvid Mærsk <amaersk@hotmail.com> wrote in
news:tegpcvk9oc757005epgl3pb96k1p6oickt@4ax.com
> sp1 sp2
> navn1 Ja Ja
> navn2 Ja Nej
> navn3 Nej Nej
> navn4 Ja
> navn5 Nej Ja
>
> Svaret i begge kolonner kan være Ja, Nej eller ikke udfyldt.
> Jeg er interesseret i hvor mange der har svaret Ja og kan snildt
> udtrække antallet af Ja i sp1 og sp2 hver for sig h.h.v. 2 og 3.
> Men hvordan udtrækker jeg det samlede antal Ja (5) i MySQL?
Jeg ved ikke om MySQL kan klare det, men det er i hvert fald SQL:
SELECT COUNT(
(SELECT COUNT(sp1) FROM svartabel WHERE sp1 = 'ja')
+(SELECT COUNT(sp2) FROM svartabel WHERE sp2 = 'ja')
)
FROM svartabel;
Hvis MySQL kan klare subqueries og COUNT() kan den klare det - kan
den det ? ...
(testet i Oracle 8i)
--
..: Henrik Stidsen - HS235.dk - http://hs235.dk ::...
"Drømmen om et samlet Europa har ingen mulighed for at
blive virkelighed. Man kan ikke lave omelet af hårdkogte æg."
[Charles De Gaulle]
| |
Peter Brodersen (22-05-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 22-05-03 21:37 |
|
On Thu, 22 May 2003 14:10:43 +0000 (UTC), Henrik Stidsen
<idontwantnospam@hs235.dk> wrote:
>(testet i Oracle 8i)
Oracle er ikke min stærke side, men mit forslag for samme
indgangsvinkel, som i mit MySQL-eksempel:
SELECT
SUM(DECODE(sp1,'Ja',1))+
SUM(DECODE(sp2,'Ja',1))
FROM svartabel
Jeg ved ikke om det kan gøres pænere.
--
- Peter Brodersen
| |
Jimmy (22-05-2003)
| Kommentar Fra : Jimmy |
Dato : 22-05-03 21:47 |
|
"Peter Brodersen" <usenet@ter.dk> wrote in message
news:bajces$mf1$1@dknews.tiscali.dk...
> On Thu, 22 May 2003 14:10:43 +0000 (UTC), Henrik Stidsen
> <idontwantnospam@hs235.dk> wrote:
>
> >(testet i Oracle 8i)
>
> Oracle er ikke min stærke side, men mit forslag for samme
> indgangsvinkel, som i mit MySQL-eksempel:
>
> SELECT
> SUM(DECODE(sp1,'Ja',1))+
> SUM(DECODE(sp2,'Ja',1))
> FROM svartabel
Hvordan skal DECODE forstås i denne sammenhæng med tre parametre?
Jeg kender den kun som modspiller til ENCODE, hvor den tager to parametre,
og jeg kan heller ikke få "SELECT DECODE(Streng,'Ja',1) FROM test" til at
virke.
MySQL.com siger følgende om DECODE:
-----
DECODE(crypt_str,pass_str)
Descrypts the encrypted string crypt_str using pass_str as the password.
crypt_str should be a string returned from ENCODE().
-----
Mvh
Jimmy
| |
Peter Brodersen (22-05-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 22-05-03 22:12 |
|
On Thu, 22 May 2003 22:46:45 +0200, "Jimmy" <nyhedsgruppe@get2net.dk>
wrote:
>> Oracle er ikke min stærke side, men mit forslag for samme
>> indgangsvinkel, som i mit MySQL-eksempel:
[..]
>Hvordan skal DECODE forstås i denne sammenhæng med tre parametre?
Det var vist ikke ordentligt formuleret. Det var her en Oracle-query,
ikke en MySQL-query. Sidstnævnte har jeg også givet et eksempel på:
<news:bajbe7$m03$2@dknews.tiscali.dk>
I Oracle-verdenen: DECODE er en simpel switch, der ud fra et felts
værdi kan give forskelligt output. Fx:
Oracle:
DECODE(foo, 'Peter', 1, 'Hans', 2, 'Ib', 3, 4)
Hvis foo er lig med "Peter", er resultatet 1.
Hvis foo er lig med "Hans", er resultatet 2.
Hvis foo er lig med "Ib", er resultatet 3.
Ellers er resultatet 4.
DECODE(sp1,'Ja',1) var blot for at konvertere "Ja" til tallet 1, da
det så ville være lettere at lægge tal sammen.
>MySQL.com siger følgende om DECODE:
Yep - DECODE() har en helt anden funktionalitet i MySQL-universet.
DECODE minder om CASE .. WHEN .. THEN .. WHEN .. THEN .. ELSE .. END i
MySQL. Fx:
MySQL:
CASE foo WHEN 'Peter' THEN 1 WHEN 'Hans' THEN 2 WHEN 'Ib' THEN 3 ELSE
4 END
--
- Peter Brodersen
| |
Peter Brodersen (22-05-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 22-05-03 21:20 |
|
On Thu, 22 May 2003 14:29:22 +0200, Arvid Mærsk <amaersk@hotmail.com>
wrote:
>Svaret i begge kolonner kan være Ja, Nej eller ikke udfyldt.
>Jeg er interesseret i hvor mange der har svaret Ja og kan snildt
>udtrække antallet af Ja i sp1 og sp2 hver for sig h.h.v. 2 og 3.
>Men hvordan udtrækker jeg det samlede antal Ja (5) i MySQL?
Jeg tænkte lidt over den, og endte med følgende, som egentligt er ret
simpel og ukompliceret:
SELECT SUM((sp1 = 'Ja') + (sp2 = 'Ja')) FROM foo;
--
- Peter Brodersen
| |
Arvid Mærsk (22-05-2003)
| Kommentar Fra : Arvid Mærsk |
Dato : 22-05-03 21:59 |
|
On Thu, 22 May 2003 22:19:40 +0200, Peter Brodersen <usenet@ter.dk>
wrote:
>Jeg tænkte lidt over den, og endte med følgende, som egentligt er ret
>simpel og ukompliceret:
>
>SELECT SUM((sp1 = 'Ja') + (sp2 = 'Ja')) FROM foo;
Tak for indlæggene og forslagene, jeg får først testet det i morgen og
vender tilbage.
--
AM
| |
Jesper Hansen (22-05-2003)
| Kommentar Fra : Jesper Hansen |
Dato : 22-05-03 23:37 |
|
On Thu, 22 May 2003 22:19:40 +0200, Peter Brodersen <usenet@ter.dk>
wrote:
>SELECT SUM((sp1 = 'Ja') + (sp2 = 'Ja')) FROM foo;
Hvad står "foo" for?
Det er altid ordet foo der bliver brugt i manualer i eksembler, er det
bare et ord der er blevet valgt?
Med venlig hilsen
Jesper Hansen
| |
Peter Brodersen (22-05-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 22-05-03 23:59 |
|
On Fri, 23 May 2003 00:36:37 +0200, Jesper Hansen <sebulba_@mailme.dk>
wrote:
>>SELECT SUM((sp1 = 'Ja') + (sp2 = 'Ja')) FROM foo;
>Hvad står "foo" for?
Foo is the world that's been pulled over your eyes to blind you from
the truth.
>Det er altid ordet foo der bliver brugt i manualer i eksembler, er det
>bare et ord der er blevet valgt?
RFC3092 har et bud:
http://www.ietf.org/rfc/rfc3092.txt
Denne refererer til The Jargon Lexicon:
http://www.catb.org/jargon/html/F/foo.html
--
- Peter Brodersen
| |
Jesper Hansen (23-05-2003)
| Kommentar Fra : Jesper Hansen |
Dato : 23-05-03 14:03 |
| | |
Arvid Mærsk (23-05-2003)
| Kommentar Fra : Arvid Mærsk |
Dato : 23-05-03 12:00 |
|
Peter Brodersen <usenet@ter.dk> skrev så viseligt:
>Jeg tænkte lidt over den, og endte med følgende, som egentligt er ret
>simpel og ukompliceret:
>
>SELECT SUM((sp1 = 'Ja') + (sp2 = 'Ja')) FROM foo;
Så enkelt kan det gøres, tak for hjælpen, det virker
Jeg havde selv SUM() i tankerne, men mente kun det gjaldt numeriske
værdier.
--
AM
| |
Peter Brodersen (23-05-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 23-05-03 17:47 |
|
On Fri, 23 May 2003 13:00:07 +0200, Arvid Mærsk <amaersk@hotmail.com>
wrote:
>>SELECT SUM((sp1 = 'Ja') + (sp2 = 'Ja')) FROM foo;
[..]
>Jeg havde selv SUM() i tankerne, men mente kun det gjaldt numeriske
>værdier.
Det er som sådan også tilfældet. (sp = 'Ja') returnerer enten sandt
(1) eller falsk (0). Måske det illustreres bedre på denne måde:
mysql> SELECT (sp1 = 'Ja'), (sp2 = 'Ja') FROM foo;
+--------------+--------------+
| (sp1 = 'Ja') | (sp2 = 'Ja') |
+--------------+--------------+
| 1 | 1 |
| 1 | 0 |
| 0 | 0 |
| 0 | 1 |
| 0 | 1 |
+--------------+--------------+
5 rows in set (0.00 sec)
Vi adderer så de to kolonner:
mysql> SELECT ((sp1 = 'Ja') + (sp2 = 'Ja')) FROM foo;
+-------------------------------+
| ((sp1 = 'Ja') + (sp2 = 'Ja')) |
+-------------------------------+
| 2 |
| 1 |
| 0 |
| 1 |
| 1 |
+-------------------------------+
5 rows in set (0.00 sec)
... og så kan vi lige så godt smide SUM udenpå:
mysql> SELECT SUM((sp1 = 'Ja') + (sp2 = 'Ja')) FROM foo;
+----------------------------------+
| SUM((sp1 = 'Ja') + (sp2 = 'Ja')) |
+----------------------------------+
| 5 |
+----------------------------------+
1 row in set (0.00 sec)
--
- Peter Brodersen
| |
|
|