MySQL, sök & gruppera från flera tabeller

Tråden skapades och har fått 2 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Höganäs
  • 2005-11-28 23:50

Har följande tabeller (förenklat):

Tavlingar:
+----------+-------+-------+
| name     | arr   | gren  |
+----------+-------+-------+
| Tavling1 |     1 |  101  |
| Tavling2 |     2 |  102  |
| Tavling3 |     1 |  103  |
| Tavling4 |     2 |  101  |
+----------+-------+-------+

Arrangorer:	
+-----+-------+
| aid | namn  |
+-----+-------+
|  1  | Arr1  |
|  2  | Arr2  |
+-----+-------+


Grenar:
+--------+------+
| gid    | gren |
+--------+------+
| 101    | Lg   |
| 102    | Kh   |
| 103    | Bg   |
+--------+------+

Jag vill i en enda sökning skapa följande resultat:

Arran.	Lg	Kh	Bg	Antal

Arr1	1	0	1	2
Arr2	1	1	0	2

dvs en sammanställning över hur många tävlingar samt vilka grenar (antal) resp. arrangör anordnat.

Hur kan en sådan söksträng för MySQL se ut, måntro?

  • Medlem
  • Kiruna
  • 2005-11-29 00:58

Kanske så här:

SELECT
	name,
	SUM(t.gren=101) as Lg,
	SUM(t.gren=102) as Kh,
	SUM(t.gren=103) as Bg,
	count(*) as Antal
FROM Arrangorer a
INNER JOIN Tavlingar t ON a.aid=t.arr
GROUP BY name;

Det du försöker göra är en CROSSTAB och är inte det simplaste. Se ex. Wikipedia för mer information.

(I exemplet ovan måste du alltså för hand lägga till kolumner om det ska komma till nån mer gren.)

P.S. Exemplet ovan fungerar pga MySQL gör en implicit CAST av jämförelsen (t.gren=101...) till integer.

Senast redigerat 2005-11-29 01:18
  • Medlem
  • Höganäs
  • 2005-11-29 09:23

Tack spot!

Det funkade riktigt bra.
Som tur är rör det sig endast om nio grenar, så jag kan fixa det manuellt enligt ditt förslag.

1
Bevaka tråden