[MSSQL] Sorteren en normaliseren in 1 query?

Pagina: 1
Acties:

  • Yoozer
  • Registratie: Februari 2001
  • Laatst online: 03-08 17:53

Yoozer

minimoog

Topicstarter
De situatie:

Ik heb een aantal waardes die allemaal in een aparte categorie vallen. Die wil ik sorteren en groeperen op categorie. Om het bovenste deel van de afbeelding te krijgen; geen probleem, dat lukt. Om de maxima op te halen per categorie om vermenigvuldigingsfactoren te berekenen: ook geen probleem.

Afbeeldingslocatie: http://img503.imageshack.us/img503/677/sorteernormaliseerqy3.png

Waar ik naar zoek is een methode om het onderste plaatje te krijgen in 1 query (of de resultaten van 1 query op een of andere manier bij elkaar gemikt). Kunnen queries (in een view of wat dan ook) op deze manier aan elkaar gekit worden met behoud van de sortering, of kan dat alleen met de server-side helft (in dit geval ASP.NET, maar dat zou voor de SQL niet relevant moeten zijn) opgeknapt worden door de queries achter elkaar af te vuren en uit te rekenen op het moment dat ze worden weergegeven?

teveel zooi, te weinig tijd


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Wat is het verschil tussen 1 en 2 ?

https://fgheysels.github.io/


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 07:54

Janoz

Moderator Devschuur®

!litemod

2e is genormaliseerd per categorie ;)

Je kunt het netjes binnen de ASP oplossen, maar als het echt binnen 1 query moet kun je hem wel joinen met een query waarin je de max per cat bepaald.


ff uit het handje:
SQL:
1
2
3
4
5
6
7
Select t1.waarde / t2.maxw * 100% as perc, cat 
from 
    data as t1 
  join 
    (select max(waarde) as maxw, cat from data group by cat) as t2 
    on t1.cat = t2.cat
order by perc,cat

[ Voor 38% gewijzigd door Janoz op 04-05-2007 14:25 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Yoozer
  • Registratie: Februari 2001
  • Laatst online: 03-08 17:53

Yoozer

minimoog

Topicstarter
De reden dat ik 't eigenlijk in 1 query wil duwen is omdat elk resultaat een webpagina is met een score voor een stel keywords. De pagina's vallen in aparte categorieën, maar de relevantie van de eerste moet niet bepalend zijn voor de rest. De zoekresultaten gebruiken paging om het aantal resultaten te limiteren per pagina, en ze worden onder elkaar gepresenteerd met een scheidingsbalk ertussen als er een nieuwe categorie begint. Momenteel wordt een deel van de lading overgelaten aan ASP.Net code, maar wat naar MSSQL kan wil ik opschuiven voor performance.

Voordat enige "maar dan installeer je toch Lucene.net / HTDig / wat dan ook" - helaas. De huidige oplossing is zelf te tweaken voor resultaten een kunstmatige boost te geven als dat nodig is.

Janoz : thanks, die ga ik eens even testen :).

[ Voor 3% gewijzigd door Yoozer op 04-05-2007 14:50 ]

teveel zooi, te weinig tijd