mysql - 将子查询中的列添加到主查询的 SELECT 中,而不应用主查询中 WHERE 的过滤器

标签 mysql sql

我需要帮助解决以下问题:

所以我有一个表 TABLE1,其中包含日期、名称、STAT1、STAT2、PROBLEM1 列

我有一个这样的查询:

SELECT Date, Name, sum(STAT1), sum(STAT2)
FROM TABLE1
WHERE PROBLEM1 <> 0 
GROUP BY Date, Name

此查询的结果是我想要的,但我还需要添加 2 列: TOTALCOUNT 基本上是每个组的行数,而不应用过滤器 (PROBLEM1 <> 0 ) 和 COUNTERRORS 是每个组的计数其中 PROBLEM1 = 0。

给你进一步的例子。对于日期 A 和姓名 B,我有 1000 行。其中 300 人的问题 1 = 0。 我运行上面提到的第一个查询,由于过滤器 WHERE PROBLEM1 <> 0,它根据 700 行计算我的 sum(STAT1)、sum(STAT2) 。我需要找到一种方法将两列添加到结果中,以便最后我的表格看起来像:

DATE NAME sum(STAT1)  sum(STAT2) TOTALCOUNT COUNTERRORS
A     B       50          3.5      1000        300

可以吗?我尝试使用子查询但没有成功。

最佳答案

您可以进行条件聚合:

SELECT Date, Name, 
       sum(case when PROBLEM1 <> 0  then stat1 else 0 end) as stat1, 
       sum(case when PROBLEM1 <> 0  then stat2 else 0 end) as stat2, 
       count(*) as TOTALCOUNT,
       sum(PROBLEM1 = 0) as COUNTERRORS 
FROM TABLE1
GROUP BY Date, Name;

关于mysql - 将子查询中的列添加到主查询的 SELECT 中,而不应用主查询中 WHERE 的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61344295/

相关文章:

sql - 如何使用WKT?

mysql 查询 count() 限制为 8

Mysql CREATE 语句真的很慢(Mac OS X/Macport 安装)

php - 用于对数据库中多次存在的记录进行计数的 SQL 查询是什么?

sql - 如果另一列为空,禁止用户更新列?

sql - 在字符串中存储数组(数据库专家问题)

MySQL用单个查询反转一列

mysql - 用于跨时间跟踪数据的数据库结构

java - Bean 在 applicationContext 中,但 @Autowired 注释不起作用

sql - CREATE TABLE [dbo].[Table] - dbo 部分是什么意思?