If you can judge a wise man by the color of his skin then mister you're a better man than I
En waar komen die andere 2 kolommen vandaan?
Die stellen dus het aantal rijen voor waarin een cel een bepaalde waarde heeft. ((4 of 5), 6 of <>6)Acid__Burn schreef op donderdag 18 juni 2009 @ 14:29:
[...]
En waar komen die andere 2 kolommen vandaan?
Waarschijnlijk kun je dit heel eenvoudig oplossen door het probleem compleet anders te tackelen, maar ik kom er zo ff niet op.
If you can judge a wise man by the color of his skin then mister you're a better man than I
onderstaande code is geen MySQL maar DB2
, maar ik zou het in deze richting zoeken.
tweede optie:
reden edit: Optie 2 is beter dan optie 1
tweede optie:
code:
1
2
3
4
5
6
7
8
| SELECT
naam,
sum(case when position in ('4','5') then 1 else 0 end) as "aantal 1",
sum(case when position = '6' then 1 else 0 end) as "aantal 2",
sum(case when position position <> '6' 1 else 0 naam end) as "aantal 2"
FROM brontabel where EVENTDATE between '20090617' and '20090619'
group by
naam |
reden edit: Optie 2 is beter dan optie 1
[ Voor 69% gewijzigd door freak-ish op 18-06-2009 15:37 ]
Als je ID meeneemt in de select, zul je nooit een goede count kunnen maken. Maar probeer anders een iets met subselect:sjunnie schreef op donderdag 18 juni 2009 @ 14:39:
[...]
Die stellen dus het aantal rijen voor waarin een cel een bepaalde waarde heeft. ((4 of 5), 6 of <>6)
Waarschijnlijk kun je dit heel eenvoudig oplossen door het probleem compleet anders te tackelen, maar ik kom er zo ff niet op.
SQL:
1
2
3
4
5
| select * from table where id in (select id from table 2) |
of
SQL:
1
2
3
4
| select * from (select id from table 2) TT |
Ik ga mee met het voorstel van freak-ish (afgezien van het dubbele alias "aantal 2")
When life gives you lemons, start a battery factory
Ik ga niet mee met het voorstel van freak-ish, maar maak er een afgeleide van 
Netjes met COUNT, COUNT teld alleen als de waarde niet NULL is, als de CASE dus NULL terug geeft, telt ie niet.
Edit:
Waarom zijn we quotjes om getallen aan het zetten
SQL:
1
2
3
4
5
6
7
8
9
10
11
| SELECT naam, COUNT(case when position in (4,5) then 1 else NULL end) as "aantal 1", COUNT(case when position = 6 then 1 else NULL end) as "aantal 2", COUNT(case when position position <> 6 then 1 else NULL end) as "aantal 2" FROM brontabel WHERE eventdate BETWEEN '20090617' AND '20090619' GROUP BY naam |
Netjes met COUNT, COUNT teld alleen als de waarde niet NULL is, als de CASE dus NULL terug geeft, telt ie niet.
Edit:
Waarom zijn we quotjes om getallen aan het zetten
[ Voor 6% gewijzigd door RobertMe op 18-06-2009 17:24 ]
Super, -na enige minor changes- lijkt dit exact te doen wat ik zoek.RobertMe schreef op donderdag 18 juni 2009 @ 17:21:
Ik ga niet mee met het voorstel van freak-ish, maar maak er een afgeleide van
SQL:
1 2 3 4 5 6 7 8 9 10 11 SELECT naam, COUNT(case when position in (4,5) then 1 else NULL end) as "aantal 1", COUNT(case when position = 6 then 1 else NULL end) as "aantal 2", COUNT(case when position position <> 6 then 1 else NULL end) as "aantal 2" FROM brontabel WHERE eventdate BETWEEN '20090617' AND '20090619' GROUP BY naam
Netjes met COUNT, COUNT teld alleen als de waarde niet NULL is, als de CASE dus NULL terug geeft, telt ie niet.
Edit:
Waarom zijn we quotjes om getallen aan het zetten
If you can judge a wise man by the color of his skin then mister you're a better man than I
Pagina: 1