您可以在聚合函数中使用 CASE 表达式,它将在列中获得结果:
SELECT 
  COUNT(case when amount >= 0 and amount <= 100 then users.id end) Amt0_100,
  COUNT(case when amount >= 101 and amount <= 200 then users.id end) Amt101_200,
  COUNT(case when amount >= 201 and amount <= 300 then users.id end) Amt201_300
FROM transactions
LEFT JOIN users 
  ON users.id = transactions.user_id;
请参阅带有演示的 SQL Fiddle
您会注意到我更改了 0-100、101-200、201-300 的范围,否则您将在 100、200 值上计算两次用户 ID。  
如果您想要行中的值,那么您可以使用:
select count(u.id), 
  CASE 
    WHEN amount >=0 and amount <=100 THEN '0-100'
    WHEN amount >=101 and amount <=200 THEN '101-200'
    WHEN amount >=201 and amount <=300 THEN '101-300'
  END Amount
from transactions t
left join users u
  on u.id = t.user_id
group by 
  CASE 
    WHEN amount >=0 and amount <=100 THEN '0-100'
    WHEN amount >=101 and amount <=200 THEN '101-200'
    WHEN amount >=201 and amount <=300 THEN '101-300'
  END 
请参阅带有演示的 SQL Fiddle
但是,如果您有许多需要计算计数的范围,那么您可能需要考虑创建一个包含范围的表,类似于以下内容:
create table report_range
(
  start_range int,
  end_range int
);
insert into report_range values
(0, 100),
(101, 200), 
(201, 300);
然后,您可以使用此表连接到当前表并按范围值分组:
select count(u.id) Total, concat(start_range, '-', end_range) amount
from transactions t
left join users u
  on u.id = t.user_id
left join report_range r
  on t.amount >= r.start_range
  and t.amount<= r.end_range
group by concat(start_range, '-', end_range);
请参阅SQL Fiddle with Demo。
如果您不想使用范围创建新表,则始终可以使用派生表来获得相同的结果:
select count(u.id) Total, concat(start_range, '-', end_range) amount
from transactions t
left join users u
  on u.id = t.user_id
left join
(
  select 0 start_range, 100 end_range union all
  select 101 start_range, 200 end_range union all
  select 201 start_range, 300 end_range 
) r
  on t.amount >= r.start_range
  and t.amount<= r.end_range
group by concat(start_range, '-', end_range);
请参阅带有演示的 SQL Fiddle