2009-09-14 9 views

Répondre

0

Quelque chose comme ça:

select * 
from product p1 
where (select count(*) from product p2 
     where p2.product_type=p1.product_type and p2.price<p1.price)<4 
order by product_type, product_price; 

la requête imbriquée se classe produits par prix dans son type (plus d'autres prix de est < que le prix de ce produit, plus grande est c'est le numéro de rang; le moins cher a le rang 0), la requête externe sélectionne simplement ces produits avec le rang entre 0 et 3.

Depuis que vous avez écrit "ordre par ", je comprends que vous avez besoin de chaque article, pas un agrégat d'entre eux. Par conséquent, le groupe par n'est pas nécessaire dans la requête externe. Si vous n'avez besoin que d'une chaîne de leurs noms, alors allez-y:

select 
    group_concat(name) 

from product p1 
where (select count(*) from product p2 
     where p2.product_type=p1.product_type and p2.price<p1.price)<4 
group by product_type; 
Questions connexes