Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql-使用大小写和计数创建视图_Mysql - Fatal编程技术网

Mysql-使用大小写和计数创建视图

Mysql-使用大小写和计数创建视图,mysql,Mysql,我试图从这两个表中创建一个包含CASE和COUNT的视图 t_jobs | job_id | +--------+ | 1 | | 2 | | 3 | | 4 | t_emails | email_id | job_id | email_log | +----------+--------+-----------+ | 1 | 1 | OK | | 2 | 1 | ERROR |

我试图从这两个表中创建一个包含CASE和COUNT的视图

t_jobs

| job_id |
+--------+
|   1    |
|   2    |
|   3    |
|   4    |

t_emails 

| email_id | job_id | email_log |
+----------+--------+-----------+
|    1     |   1    |    OK     |
|    2     |   1    |   ERROR   |
|    3     |   2    |   ERROR   |
|    4     |   3    |    OK     |
结果应该是这样

view_jobs

| job_id | email_check | email_total |
+--------+-------------+-------------+
|    1   |     1       |      2      |
|    2   |     1       |      1      |
|    3   |     0       |      1      |
|    4   |     0       |      0      |
我试着用这种方法,但没有成功

SELECT
  j.job_id,
  CASE WHEN MAX( e.email_log != 'OK' ) THEN 1 ELSE 0 END email_check
  COUNT( e.email_log ) AS email_total
FROM t_jobs j
  LEFT OUTER JOIN `t_emails` `e` ON `j`.`job_id` = `e`.`job_id`
GROUP BY
  j.job_id;
你能告诉我怎么做吗
谢谢

您刚刚忘记了第二列末尾的逗号(,)。
我也稍微改变了你的状况。
此处,电子邮件检查1表示作业id有错误
0表示没有错误

 SELECT
      j.job_id,
      CASE WHEN MIN( e.email_log ) = 'error'  THEN 1 ELSE 0 END as email_check,
      COUNT( e.email_log ) AS email_total
    FROM t_jobs j
      LEFT OUTER JOIN `t_emails` `e` ON `j`.`job_id` = `e`.`job_id`
    GROUP BY
      j.job_id;

我想您需要一个简单的条件聚合-

SELECT j.job_id,
       COUNT(CASE WHEN e.email_log <> 'OK' THEN 1 ELSE NULL END) email_check,
       COUNT(e.email_log) AS email_total
FROM t_jobs j
LEFT OUTER JOIN `t_emails` `e` ON `j`.`job_id` = `e`.`job_id`
GROUP BY j.job_id;
选择j.job\u id,
计数(e.email\u log“OK”后为1,否则为空结束)电子邮件检查,
将(如电子邮件日志)计入电子邮件总数
来自t_jobs j
左外接't\u'e'在'j'上。'job\u id`='e`。'job\u id``
按j.job_id分组;

你能解释一下email\u check列的逻辑吗?为什么
job\u id
4有
email\u check
=1?我想应该是
0
@GMB-对不起,我弄错了。我编辑了它。你能解释一下email\u check栏中的1和0吗?你的代码会返回你期望的结果。你的问题是什么?@MadhurBhaiya,你是想像我一样删除
ELSE
子句吗?这没有任何区别。这都是为了遵循更清晰的语法来理解;这样任何人都可以阅读它,并找出发生了什么
ELSE NULL
明确表示,如果没有匹配项,则不计算在内。我更喜欢以稍微冗长为代价的更清晰的查询,因为这样通常可以避免犯类似
ELSE 0
;)的错误@MadhurBhaiya,完全同意这一点,并肯定会尝试在未来遵循同样的原则。像这样的小事清楚地表明了印第安人和非印第安人的区别。