Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQL/PostgreSQL] WHERE parameters doorzetten naar subquery?

Pagina: 1
Acties:

  • pkwarts
  • Registratie: April 2008
  • Laatst online: 28-08 11:26

pkwarts

555433800

Topicstarter
Goedendag,

Ik heb het volgende probleem (in PostgreSQL icm PostGIS):

Ik heb een mooie query die verschillende records groepeert. Alhoewel het wat PostGIS functies gebruikt is het probleem niet PostGIS gerelateert, dus mocht je er niet bekend mee zijn, bear with me ;)
SQL:
1
2
3
4
5
6
7
8
SELECT count(*), ST_Centroid(ST_Collect("geom")) AS "geom"
FROM (
  SELECT kmeans(ARRAY[ST_X("geom"), ST_Y("geom")], 5) OVER (), "geom"
  FROM "table"
  WHERE "geom" && ST_GeomFromText("Bounding box") --Om deze regel gaat het
) AS ksub
GROUP BY kmeans
ORDER BY kmeans;


Hier komt een result uit. So far so good.

Nu maak ik gebruik van geoserver die de data opvraagt aan de database en zelf de queries schrijft. Dit komt neer op:
SQL:
1
SELECT "count", "geom" FROM "table" WHERE "geom" && ST_GeomFromText("Bounding Box");


Is het mogelijk een view te schrijven die de WHERE parameters (of de waarde "Bounding box") doorzet naar de subquery? Het is niet mogelijk deze buiten de subquery te laten omdat de subquery dan eerst voor alle data een aantal clusters zal berekenen, en je vervolgens met WHERE kijkt welke clusters er nog in je bounding box vallen. Ik wil juist voor de bounding box een berekening laten uitvoeren.

  • TallManNL
  • Registratie: Oktober 2005
  • Laatst online: 22-11 14:29
Je kunt het geheel in een table valued function gieten (doc)

Hierbij kun je gewoon parameters naar je functie toegeven die in de where clause gebruikt moeten worden.

geheelonthouder met geheugenverlies


  • pkwarts
  • Registratie: April 2008
  • Laatst online: 28-08 11:26

pkwarts

555433800

Topicstarter
Echter kan ik de query die Geoserver uitvoert niet aanpassen. Die komt altijd op deze manier binnen. Ik zie geen manier om dit vervolgens om te vormen naar datgene wat ik bovenaan heb gepost.