/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
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

On Fri, 23 May 2003 00:58:59 +0200, Peter Brodersen <usenet@ter.dk>
wrote:

>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

Der er jo læsning til længere tid, men tak for linkene.

Med venlig hilsen
Jesper Hansen

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

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste