在同一个查询中选择all和some

时间:2013-06-20 09:05:53

标签: mysql

我有这个架构

Table Foo
user_id | time_dif | tool
1       | 1        | flurry
1       | 0        | flurry
1       | 15       | flurry
1       | 4        | flurry
1       | 5        | topler

我想要的是同时执行这两项的查询,遗憾的是我不知道如何将它们合并...

select count (user_id), tool  from Foo group by tool;
> 4 , flurry
> 1 , topler

select count(user_id) from Foo where time_diff > 2 group by tool 
> 2 , flurry
> 1 , topler

我想要一个将这两者结合在一起的查询,并给了我这样的东西:

> 4 , 2 , flurry
> 1 , 1 , topler

注意:我希望在同一行中返回两个结果......

1 个答案:

答案 0 :(得分:4)

你可以使用这样的查询:

SELECT
  tool,
  COUNT(user_id) cnt,
  COUNT(CASE WHEN time_diff>2 THEN user_id END) cnt2
FROM
  Foo
GROUP BY
  tool

CASE WHEN如果time_diff> 2则返回user_id,否则返回NULL,COUNT只计算非空值。请参阅小提琴here