具有多个条件的计数功能

时间:2016-10-24 01:38:49

标签: sql oracle

我正在尝试对具有多个条件的一组数据执行整体计数功能,但我遇到了麻烦。我是初学者,尝试使用简单的计数功能,但没有运气。我调查了使用案例,但遇到了麻烦。有谁知道我应该怎么做这个代码?

以下是我的表格示例:

Name  | Date     |    Status   | Candy | Soda | Water
Nancy | 10/19/16 |    active   |   2   |  0   | 1 
Lindsy| 10/20/15 |    active   |   0   |  1   | 0 
Erica | 10/20/13 |    active   |   0   |  2   | 3 
Lane  | 10/19/14 |    active   |   0   |  0   | 4 
Alexa | 10/19/16 |  notactive  |   0   |  5   | 1 
Jenn  | 10/19/16 |    active   |   0   |  0   | 0 

我希望在以下条件下对名称进行全面统计:糖果,苏打水或水不是零(无论是哪一列或多少,只要这三个中的一个是不是零),该帐户处于活动状态,并且当日期在过去两年内,即10/2014 - 10/2016。

我希望查询告诉我计数总数为3并且还显示:

    Name  | Date     |    Status   | Candy | Soda | Water
    Nancy | 10/19/16 |    active   |   2   |  0   | 1 
    Lindsy| 10/20/15 |    active   |   0   |  1   | 0 
    Lane  | 10/19/14 |    active   |   0   |  0   | 4

2 个答案:

答案 0 :(得分:0)

SELECT *
FROM yourTable
WHERE (Candy > 0 OR Soda > 0 OR Water > 0) AND
      Status = 'active' AND
      Date BETWEEN '2014-10-01' AND SYSDATE

答案 1 :(得分:0)

这是两个不同的问题。获取行的基本思路是:

select t.*
from t
where greatest(candy, soda, water) > 0 and
      status = 'active' and
      date >= curdate() - interval 2 year;

(在Oracle中,您可以使用sysdate而不是curdate()。)

要获得计数,您可以在count(*)中使用*而不是select。 SQL查询仅返回一个结果集。 。 。所以你要么把所有行都计算在内。