我有一张像下面这样的桌子

report_code | result_of_report
_______________________________
Rpx-34512-00| rejected
Rpx-34512-01| rejected
Rpx-34512-02| rejected
Rpt-22433-00| rejected
Rpt-22433-01| rejected
Rpt-22433-02| rejected
Rpt-22433-03| rejected
Rpt-22433-04| rejected
Rpt-22433-05| rejected
Rpt-22433-06| accepted
Rcs-34555-00| rejected
Rcs-34555-01| rejected
Rcs-34555-02| accepted

这就是我想要得到的:对于report_code,我需要substr(report_code, 4,5)到5位数字的报告代码,并寻找尚未接受的报告.

第六版(顺便说一句,哪个版本被接受并不重要)有一个被接受的记录.就这样过go 了.34555在第二次修订中被录取.它也通过了.但34512没有任何公认的记录.我想列出像34512这样的所有记录,但有组.所以我不想列出很多重复的行.更清楚的是,不需要列出34512 3次.一个就够了.

首先,我想解释一下我try 了什么.我知道这不是正确的方式,但这对我来说是一个临时的解决方案.

我运行了一个循环,取where result_of_report='rejected',在这个循环中,我将5位REPORT_CODE作为$code,并在第一个循环中使用该代码作为where(report_code, 'like', '$code) AND where(result_of_report, '=', 'accepted'),以查询每条记录.????‍♂️

正如你所看到的,这不是正确的方式,但我也不知道正确的方式.我对任何以最有效的方式实现这一目标的 idea 都持开放态度.不想进行数百万次循环迭代.提前感谢您的帮助.

推荐答案

您可以按SUBSTR(report_code, 5,5)分组并使用条件聚合,如下所示:

SELECT SUBSTR(report_code, 5,5) AS report_code
FROM table_name
GROUP BY SUBSTR(report_code, 5,5)
HAVING COUNT(CASE WHEN result_of_report='accepted' THEN 1 END) = 0

HAVING COUNT(CASE WHEN result_of_report='accepted' THEN 1 END) = 0用于确保至少有一行包含result_of_report='accepted'.请注意,COUNT函数只计算非空值,因此包含result_of_report<>'accepted的行将不会计算在内.

请看demo.

Mysql相关问答推荐

MySQL查询获取图书的唯一读取页面数

JOOQ-如何在一个查询中引用多个(但不是所有)表中的所有字段

使用MySQL工作台导出具有数据的数据库表并导入到其字段具有不同数据类型的同一表中

SQL/Pyspark -判断条件

如果我有USER列,如何将SQL CREATE TABLE与PostgreSQL和MySQL一起使用?

数组上的MySQL、JSON_CONTAINS用法

无法确定查询逻辑

Mysql:使用like Select 查询

从单行中获取最大日期的最佳方法

如何清除mysql 8 innodb中的数据库缓存

MySql,如何从列中替换某种格式的字符串

mySQL 中的主数据库和 IF 错误?

插入重复键查询以在每一行上进行自定义更新

MySQL 工作台与 phpMyAdmin

Spring Boot:Jdbc javax.net.ssl.SSLException:在接收对等方的 close_notify 之前关闭入站

如何在 MySQL 中为用户设置默认架构

utf8mb4_unicode_ci 与 utf8mb4_bin

在网页的 HTML 表中显示 MySQL 数据库表中的值

int(11) 和 int(11) UNSIGNED 有什么区别?

如何将本地托管的 MySQL 数据库与 docker 容器连接