无法解决在同一个表中有数据的sql查询

3gtaxfhh  于 2021-06-19  发布在  Mysql
关注(0)|答案(4)|浏览(371)

我有一个数据库,想得到这个输出。有人要求我不使用连接和子查询,但我无法通过任何方法做到这一点,所以有人能告诉我有多少种方式,我们可以得到这个输出?
表格:

输出:

注:我的要求是,如果有人通过了所有科目,那么结果应该是通过或不通过。

fzsnzjdm

fzsnzjdm1#

使用聚合和分组方式
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f5d36431c8e62633cd73525cb7a6d366

select sid, min(res)
from tablename
group by sid
uttx8gqw

uttx8gqw2#

通过使用join可以满足需求。我正在考虑将“student”作为表名

SELECT s.sid, 
       COALESCE(temp.res, 'F') AS res
FROM   student s 
       LEFT JOIN (SELECT s1.sid, 
                         'P' AS res 
                  FROM   `student` s1 
                  WHERE  NOT EXISTS (SELECT s2.sid 
                                     FROM   `student` s2 
                                     WHERE  res = 'F' 
                                            AND s1.sid = s2.sid)) AS temp 
              ON s.sid = temp.sid 
GROUP  BY s.sid
js4nwp54

js4nwp543#

我有一个数据库,想得到这个输出。有人让我不使用join和subquery
根据您的样本数据和预期结果,您可以使用 where ```
SELECT sid,res
FROM T
WHERE sub = 'E'

编辑
我的要求是,如果有人通过了所有科目,那么结果应该是通过其他人不及格。
如果您的需求限制没有使用 `where` 你可以用 `MIN` 与 `group by` .
因为 `F` 值小于 `P` .
架构(mysql v5.6)

CREATE TABLE IF NOT EXISTS table1 (
id int unsigned NOT NULL,
sub varchar(6),
rev varchar(6)
) ;

INSERT INTO table1 VALUES
(1,'E','P'),
(1,'H','P'),
(2,'E','F'),
(2,'H','P'),
(3,'E','P'),
(3,'H','P');

查询#1

SELECT id,MIN(rev)
FROM table1
GROUP BY id;

idMIN(rev)
1P
2F
3P
db fiddle视图
hgb9j2n6

hgb9j2n64#

为了使其独立于实际字符值,我们可以首先将p/f字符转换为数字。然后我们检查最小值并将结果转换回字母。

SELECT
    sid,
    (CASE WHEN MIN(CASE res
             WHEN 'P' THEN 1
             ELSE 0
             END) = 1 THEN 'P'
         ELSE 'F'
     END) AS res
FROM t
GROUP BY sid

相关问题