С этими данными
CREATE TABLE users
(`height` varchar(8), `sex` varchar(8), `name` varchar(9), `weight` varchar(8))
;
INSERT INTO users
(`height`, `sex`, `name`, `weight`)
VALUES
('100', 'female', 'Alice', '150'),
('100', 'female', 'Barbara', '130'),
('100', 'female', 'Candice', '100'),
('190', 'male', 'John', '185'),
('190', 'male', 'Bert', '130'),
('190', 'male', 'John', '113')
;
И с этим оператором sql
Select name, u.weight
from users u inner join
(Select min(weight) weight ,sex,height
From users
Group by height, sex ) u1
On u.sex= u1.sex and u.height = u1.height
and u.weight = u1.weight
GROUP By u.height,u.sex;
Вы получаете следующий результат
name weight
Candice 100
John 113
Второй оператор выбора u1 получает всеминимальные веса для всех групп: пол и рост, остальное - простое внутреннее объединение, в котором выбираются только соответствующие имена