webForumDet fria alternativet

Hämta med en fråga

Databaser & SQL

3 svar · 454 visningar · startad av Claysson

Medlem sedan jan. 200454 inlägg
Frågan#1

Hej igen,

Nu behöver jag hjälp i rätt riktning igen.

Från relationsdatabasen med några JOINs, "WHERE" och "AND"-satser så vill jag i från detta urvalet räkna ut hur många rader som har t.ex. ColorID 1, och 2, osv.

Såhär kan urvalet se ut.

BilID---ColorID-----TillbehörsID
1------8----------4
2------9----------7
3------3----------4
3------3----------8
3------3----------9
4------7----------3

Nu vill jag alltså distinct räkna hur många Bilar som har ColorID 8 osv. sedan vill jag räkna hur många bilar som har TillbehörsID 4 osv..

Som ni ser blir det knas när en bil kan ha flera tillbehör, då får bilen också samma ColorID flera gånger..

Hur löser man en sådan fråga på bästa sätt? Nu har jag löst det med enskilda frågor, men vill bara gå till databasen EN gång o hämta resultatet. Är det flera unions vi pratar om?

/Claysson

Medlem sedan dec. 20025 483 inlägg
#2

Hur många bilar med resp. färg: select colorid, count(*) from tbl group by colorid

Hur många bilar som har resp. tillbehör: select tillbehörsid, count(*) from tbl group by tillbehörsid

Det kan nog bli knepigt att slå ihop dessa på ett bra sätt. Det du möjligtvis skulle kunna göra är följande:

select colorid, count(*) from tbl group by colorid
union all
select -1, -1
union all
select tillbehörsid, count(*) from tbl group by tillbehörsid

Om ordningen är deterministisk i det avseendet att resultat 1 kommer först, resultat 2 därefter o.s.v. så vet du var respektive frågas resultat börjar och slutar om (-1, -1) agerar avgränsare.

Medlem sedan jan. 200454 inlägg
#3

Peter S skrev:

select colorid, count(*) from tbl group by colorid
union all
select -1, -1
union all
select tillbehörsid, count(*) from tbl group by tillbehörsid

Ja, det var såhär jag funderade på om man skulle göra. Min "tbl" i detta fallet är dock en uträkning på över 100 rader, men peta in den i en function som returnerar denna tabell kanske vore det bästa. Tack för rådet, ska testa!

Medlem sedan jan. 200454 inlägg
#4

En generell prestandafråga, är det bättre att slå ihop två tabeller med "union" istället för att göra två slagningar mot databasen?

297 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
168 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)