我正在try 使用SQL中的COUNT函数将一些数据分三部分提取到我的ASP.NET项目中:

第一部分将使用第一个SQL查询,如下所示:

select distict, shop_number, count(Emp_id) 
from Shops_and_Employee_Table 
group by distict, shop_number

第二部分将使用第二个SQL查询:

select distict, shop_number, count(Emp_id) 
from Shops_and_Employee_Table 
where score >= 80 
group by distict, shop_number 

在我的项目中,我在2个不同的GridView中显示了上述结果.

现在我需要显示一个新的GridView,以获得第二个查询与第一个查询的平均值,我使用了以下命令,但没有获得正确的结果:

select 
    a.distict, a.shop_number, b.number / a.number
from 
    (select distict, shop_number, count(Emp_id) as number 
     from Shops_and_Employee_Table 
     group by distict, shop_number) a
join 
    (select distict, shop_number, count(Emp_id) as number 
     from Shops_and_Employee_Table 
     where score >= 80 
     group by distict, shop_number) b on a.shop_number = b.shop_number

谁能告诉我,我在我的平均查询中写了什么?或者建议我自己对C#代码中的数字求平均,但解释一下,因为我不知道如何应用它.

等待您的大力帮助.

我试着用SQL本身做,但我弄错了数字,有人告诉我用后面的C#代码做得更好,但我做不到,请帮帮我.

推荐答案

您可以使用条件聚合来组合这两个查询.

select
  se.distict,
  se.shop_number,
  count(*) as TotalCount,
  count(case when se.score >= 80 then 1 end) as Over80Count,
  count(case when se.score >= 80 then 1 end) * 1.0 / count(*) as Percent
from Shops_and_Employee_Table se
group by
  se.distict,
  se.shop_number;

在postgres和其他一些数据库中,您可以改用FILTER语法.


如果您也将distict加入,并使用left join,并通过乘以1.0转换为decimal,那么您的原始代码将会工作,如果效率相当低的话.

Sql相关问答推荐

使用group by后我的平均输出不是我想要的

PostgreSQL:获取每家店铺收入最高的员工

Postgresql:从jsons数组到单个id索引的json

如何转换和汇总行数

用相同值更新行

BigQuery`喜欢ANY‘和`不喜欢ANY’

我可以将INSERT语句与SELECT一起使用来创建条件吗?

如何计算一个用户S的日常连胜?

对多个条件的SQL进行排名

如何将insert语句重复n次使一个值递增?

Haystack针相交-在元素最多的Haystack中查找集合

将时间范围划分为全天和前后剩余小时

Postgresql - 如何根据阈值计算累积和

如何使用最后一个非 NULL 值在 PostgreSQL 列中填充 NULL 值

SQL:考虑合并分支计算分支的增长百分比

计算 BigQuery 中列的中值差 - 分析函数不能作为聚合函数的参数

获取所有用户的第一次和最后一次发货以及到达日期

Oracle函数中无法动态迭代创建的SYS_REFCURSOR

PostgreSQL - 递归地聚合来自不同列的属性

如何通过存储过程将 root 的下一个子 node 作为父 node ?