Try this.

SELECT b.file_id,
b.tablespace_name,
b.bytes/1048576 no_mbytes,
(b.bytes/1048576 - sum(nvl(a.bytes/1048576,0))) mb_used,
sum(nvl(a.bytes/1048576,0)) "free",
sum(nvl(a.bytes/1048576,0)) / (b.bytes/1048576) * 100 "%free"
FROM sys.dba_free_space a,
sys.dba_data_files b
WHERE a.file_id(+) = b.file_id
GROUP BY b.tablespace_name, b.file_id, b.bytes
having sum(nvl(a.bytes/1048576,0)) / (b.bytes/1048576) * 100 <=10
order by "%free" asc;