如何计算已执行的SQL查询的不同结果?

时间:2015-03-23 04:57:52

标签: mysql sql oracle distinct

    select application from l3_usage 
where function in ('dbms', 'web', 'app') 
group by application, function 
order by application 

enter image description here

执行上述查询时,这是结果图像。

我想现在计算应用程序发生的次数。例如: 预算:3 CSR:3 FMS:3 设施:1 库存:3

等...

我试过了

   select application, count(application) from l3_usage 
where function in ('dbms', 'web', 'app') 
group by application 
order by application 

但我得到的随机计数与我正在寻找的计数无关。

有人可以帮忙吗?谢谢!

编辑:::::

我这样做的最终目的是只获得计数值小于3的应用程序。

在这种情况下,应该只返回“设施”和“SCM”。

3 个答案:

答案 0 :(得分:2)

尝试此查询:

SELECT x.application, COUNT(*) As Frequency
FROM
(
    SELECT application
    FROM l3_usage
    WHERE function IN ('dbms', 'web', 'app') 
    GROUP BY application, function 
    ORDER BY application
) AS x
GROUP BY x.application
HAVING COUNT(*) < 3
ORDER BY COUNT(*)

我查询您在答案中发布的结果集,并获取每个组的COUNT。请注意,此COUNT是每个function组的唯一application值的数量。你应该得到这个结果:

+-------------+-----------+
| application | Frequency |
+-------------+-----------+
| Facilities  |     1     |
| SCM         |     1     |
+-------------+-----------+

<强>更新

更简单的查询方式是:

SELECT application, COUNT(DISTINCT function) As Frequency
FROM l3_usage
WHERE function IN ('dbms', 'web', 'app') 
GROUP BY application
HAVING COUNT(DISTINCT function) < 3
ORDER BY application

您在开始时有了正确的想法,但您需要SELECT每个应用程序组的不同function个数。

答案 1 :(得分:0)

SELECT application,COUNT(CASE
               WHEN application IS NOT NULL THEN 1
             END)
FROM   table group by application

我从here

找到了引用

修改


select * from(
SELECT typing,COUNT(CASE
               WHEN typing IS NOT NULL THEN 1
             END) as counts
FROM   ss  group by typing ) abc where counts<3

答案 2 :(得分:0)

我使用了已连接的子查询对您的查询进行计数。如果您想要明确的行数,请在 @count 查询

中的distinct前面使用count(*)
declare @count nvarchar(max)= (select count(*) 
                               from l3_usage 
                               where function in ('dbms', 'web', 'app'))

declare @sql nvarchar(max) = 'select a,count(*),'+@count+' as count  from l3_usage 
where function in (''dbms'', ''web'', ''app'') '

exec(@sql)