Estoy creando un sistema de caché de página web. Quería hacer un sistema simple de clasificación de página junto con la salida. El problema es que quiero mostrar el conjunto de registros con el puntaje de relevancia más alto por dominio único. Un dominio puede tener múltiples registros pero con diferentes títulos, descripciones, etc. El problema es que, en lugar de obtener 1 conjunto de registros que contiene un dominio único, agrupa todos los conjuntos de registros de ese dominio único y los emite todos. Sólo quiero que el conjunto de registros con la puntuación más alta relevancia por dominio único para cada grupo antes de indicar la siguiente (y diferente dominio con la más alta relevancia para ese grupo)Seleccionar límite máx. 1 del grupo
SELECT title, html, sum(relevance) FROM
(
SELECT title, html, 10 AS relevance FROM page WHERE title like ‘%about%’ UNION
SELECT title, html, 7 AS relevance FROM page WHERE html like ‘%about%’ UNION
SELECT title, html, 5 AS relevance FROM page WHERE keywords like ‘%about%’ UNION
SELECT title, html, 2 AS relevance FROM page WHERE description like ‘%about%’
) results
GROUP BY title, html
ORDER BY relevance desc;
que estoy recibiendo:
domain1 title html
domain1 title html
domain1 title html
domain2 title html
domain2 title html
domain2 title html
Lo que quiero es
domain1 title html
domain2 title html
domain3 title html
domain4 title html
domain5 title html
No importa en qué forma hago esto, sigo obteniendo la columna 'relevancia' no válida – Patriotec
@kinjite: Se debe a que 'relevance' es un alias de columna, al que se hace referencia en la cláusula WHERE. SQL Server admite la referencia de alias de columna en GROUP BY, pero no WHERE –
@OMG Ponies: o ORDER BY, si no recuerdo mal. Edité la respuesta para arreglar esto. Es muy feo, pero funcionará. He usado este truco antes. –