SQL获取满足不同条件的条目数

时间:2010-08-25 17:26:43

标签: sql

目标是检索一个表中具有以下内容的用户数:

  1. 字段EXPIREDATE> CURRENT_TIMESTAMP为nUsersActive
  2. 字段EXPIREDATE< CURRENT_TIMESTAMP为nUsersExpired
  3. 字段EXPIREDATE为NULL,如nUsersPreregistered
  4. 所有一个查询,结果应该是

    nUsersActive    nUsersExpired     nUsersPreregistered
    10              2                 15
    

    稍后将进行json_encoded并传递给ExtJS脚本进行显示。

    任何提示?我试了好几次都没有成功。我尝试使用UNION语句,我得到了正确的数字,但当然是在专栏中,而我需要它们。

    感谢您的支持。

3 个答案:

答案 0 :(得分:6)

以下内容应该有效,您可能需要针对您正在使用的特定数据库进行调整。

将它们列入列:

select
    count(case when EXPIREDATE > CURRENT_TIMESTAMP then 1 end) AS nUsersActive,
    count(case when EXPIREDATE < CURRENT_TIMESTAMP then 1 end) AS nUsersExpired,
    count(case when EXPIREDATE IS NULL then 1 end) AS nUserPreregistered
from users_table

并且在行中(这不是那么有效!):

  select 
    'nUsersActive' AS Param
    count(case when EXPIREDATE > CURRENT_TIMESTAMP then 1 end) AS Value
  from users_table

UNION ALL

  select 'nUsersExpired',
    count(case when EXPIREDATE < CURRENT_TIMESTAMP then 1 end)
  from users_table

UNION ALL

  select 'nUserPreregistered',
    count(case when EXPIREDATE IS NULL then 1 end)
  from users_table

答案 1 :(得分:0)

我假设您使用的是SQL Server。您应该能够使用CASE语句获得您正在寻找的内容。如果条件为真,请确保返回某些内容(任何内容),如果条件为false,则返回NULL。这是msdn文档:http://msdn.microsoft.com/en-us/library/ms181765.aspx

您的查询将如下所示:

select COUNT(CASE WHEN @ThingToCheck = 'Value' THEN 1 ELSE NULL END) as Count1, COUNT(CASE WHEN @ThingToCheck = 'Value' THEN 1 ELSE NULL END) FROM ....

答案 2 :(得分:0)

SELECT COUNT(CASE WHEN EXPIREDATE > CURRENT_TIMESTAMP THEN 1 END) AS nUsersActive,
       COUNT(CASE WHEN EXPIREDATE < CURRENT_TIMESTAMP THEN 1 END) AS nUsersExpired,
       COUNT(CASE WHEN EXPIREDATE IS NULL             THEN 1 END) AS nUsersPreregistered
  FROM Users