Question

Supposons que j'ai une table qui comporte trois champs d'entiers et un champ de chaîne (seulement des données).

Par exemple, il ressemble à:

Id      Category    Value   Data
1       1           3       ...
2       1           4       ...
3       2           2       ...
4       2           4       ...
5       3           5       ...
6       3           6       ...
7       3           2       ...
8       4           1       ...

Ce que je veux faire est pour chaque Category, inclure la ligne avec le champ Value minimum dans le jeu de résultats. Dans ce cas, il retournerait:

Id      Category    Value   Data
1       1           3       ...
3       2           2       ...
7       3           2       ...
8       4           1       ...

Comment écrire une telle requête?

Merci!

Était-ce utile?

La solution

select T1.Id,
       T1.Category,
       T1.Value,
       T1.Data
from YourTable as T1
  inner join (
               select Category,
                      min(Value) as Value
               from YourTable
               group by Category
             ) as T2
    on T1.Category = T2.Category and
       T1.Value = T2.Value

Autres conseils

select *
from mytable t
join (select category, min(value) as value from mytable group by 1) x
    on t.value = x.value and t.category = x.category

La sélection intérieure obtient les catégories et les valeurs nécessaires pour le résultat final, vous joindre à la table principale pour obtenir tous les colonnes.

SELECT category, MIN(value) as Value
FROM table
GROUP BY category

Utilisez la fonction MIN et GROUP BY les résultats sur la colonne Catégorie.

SELECT id,category,value,date 
FROM table_name 
WHERE category = (select distinct category from table_name)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top