If you are using SQL Server, this works:
-- CREATE TABLE materials(
-- Name VARCHAR(55),
-- Category VARCHAR(55),
-- Length INT)
--
-- INSERT materials(Name,Category,Length)
-- SELECT '2x4','lumber',10
-- UNION ALL
-- SELECT '2x4','lumber',20
-- UNION ALL
-- SELECT '2x4','lumber',30
-- UNION ALL
-- SELECT '4x8','lumber',10
-- UNION ALL
-- SELECT '4x8','lumber',20
-- UNION ALL
-- SELECT '4x8','lumber',30
--
SELECT
m1.Name,
m1.Length
FROM
materials m1
INNER JOIN (
SELECT
AVG(Length) AS Length,
Category
FROM materials
GROUP BY Category) m2 ON m1.Category = m2.Category
AND m1.Length > m2.Length
If you are not using SQL Server, what database are you using?