[SQL] Distinct values optellen

Pagina: 1
Acties:
  • 578 views sinds 30-01-2008
  • Reageer

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb de volgende tabel "stats"

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+-----+---------+
| sid | browser |
+-----+---------+
|   1 |       4 |
+-----+---------+
|   2 |       4 |
+-----+---------+
|   3 |       4 |
+-----+---------+
|   4 |       2 |
+-----+---------+
|   5 |       2 |
+-----+---------+
|   6 |       7 |
+-----+---------+

Ik probeer een query te schrijven die mij vertelt hoe vaak elke "browser" waarde voorkomt:
code:
1
2
3
4
5
6
7
8
9
+---------+-----------+
| browser | frequency |
+---------+-----------+
|       4 |         3 |
+---------+-----------+
|       2 |         2 |
+---------+-----------+
|       7 |         1 |
+---------+-----------+

Nu weet ik dat ik met DISTINCT, unieke waardes kan selecteren en met COUNT het aantal rijen kan tellen van elke unieke waarde. Ik krijg alleen geen query geschreven die werkt. Ik denk dat ik JOIN nodig heb om twee kolommen als resultaat terug te krijgen?
SQL:
1
2
SELECT (COUNT(DISTINCT(browser))) FROM stats /* of */
SELECT DISTINCT(browser) FROM stats JOIN LEFT /* ...? */

Wie kan mij verder helpen?

[ Voor 3% gewijzigd door Reveller op 31-10-2005 22:32 . Reden: Typo's ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:34

Creepy

Tactical Espionage Splatterer

Is group by niks?

SQL:
1
select count(browser) as frequency, browser group by browser


Zie ook P&W FAQ - SQL - Hoe werkt dat GROUP BY nu eigenlijk?

[ Voor 13% gewijzigd door Creepy op 31-10-2005 22:52 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Creepy, dank je! Ik ga die FAQ eens goed doorlezen, want makkelijk vind ik het niet. JOIN's gebruik je dus alleen maar als je informatie uit verschillende tabellen wilt koppelen?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:34

Creepy

Tactical Espionage Splatterer

Vaak wel, niet altijd. Het kan best dat je een een JOIN nodig hebt op dezelfde tabel.

Classic voorbeeld:
stel, je hebt 1 tabel met werknemers. En je wilt nu alle mensen selecteren die uit dezelfde woonplaats komen als Creepy. Dat kan met een subquery, maar ook met een join op dezelfde tabel

Subquery:
SQL:
1
2
3
4
5
6
select naam
from werknemers
where woonplaats = (
  select woonplaats
  from werknemers
  where name = 'creepy' )


Uitgeschreven join:
SQL:
1
2
3
4
select w1.naam 
from werknemers w1, werknemers w2
where w2.naam = 'creepy'
and w1.woonplaats = w2.woonplaats

of met het JOIN keyword:
SQL:
1
2
3
4
select w1.naam 
from werknemers w1
INNER JOIN werknemers w2 on and w1.woonplaats = w2.woonplaats
and w2.naam = 'creepy'

[ Voor 5% gewijzigd door Creepy op 01-11-2005 09:06 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney