mysql - SQL中如何比较多行的值

标签 mysql sql database

我有一个如下所示的源表..

Name    Subject Marks   Year

A   Science 88  2015
A   Social  75  2015
A   Social  75  2015
A   Maths   22  2015
B   Social  75  2015
B   Maths   50  2014
C   Science 88  2015
C   Social  75  2014
D   Science 88  2015
D   Social  75  2015
A   Social  75  2015
B   Maths   50  2014

我有如下要求,如果任何学生同时满足以下要求,那么他应该在另一个表 B 中被授予受尊重的要求集名称

Set1

Social  75  2015
Science 88  2015

Set2

Social  75  2015
Maths   50  2014

B表的预期输出如下

Name    Status
A   Set1
B   Set2
C   None
D   Set1

最佳答案

试试这个:

SELECT NAME,
       CASE WHEN SUM(SCIENCE) + SUM(SOCIAL) = 2 THEN 'GOOD' ELSE 'BAD' END AS Status
  FROM (SELECT NAME,
               CASE
                  WHEN SUBJECT = 'Science' AND MARKS = 88 AND YEAR = 2015
                  THEN 1 ELSE 0
               END
                  AS SCIENCE,
               CASE
                  WHEN SUBJECT = 'Social' AND MARKS = 75 AND YEAR = 2015
                  THEN  1 ELSE 0
               END
                  AS SOCIAL
          FROM A) group by Name;

SQLFiddle

enter image description here

[编辑] 如果您要添加一些规则,请在子查询中添加一个案例,并更新最重要的案例:

    SELECT NAME,
       CASE WHEN MAX(SCIENCE) + MAX(SOCIAL) = 2 THEN 'Set1' 
       WHEN MAX(SOCIAL) + MAX(MATHS) =2 THEN 'Set2'
       ELSE 'None'END AS Status
  FROM (SELECT NAME,
               CASE
                  WHEN SUBJECT = 'Science' AND MARKS = 88 AND YEAR = 2015
                  THEN 1 ELSE 0
               END
                  AS SCIENCE,
               CASE
                  WHEN SUBJECT = 'Social' AND MARKS = 75 AND YEAR = 2015
                  THEN  1 ELSE 0
               END
                  AS SOCIAL,
              CASE
                  WHEN SUBJECT = 'Maths' AND MARKS = 50 AND YEAR = 2014
                  THEN  1 ELSE 0
               END AS MATHS
          FROM A)x group by Name;

参见 SQLFiddle

enter image description here

关于mysql - SQL中如何比较多行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32348619/

相关文章:

php - 使用php在mysql中搜索整个数据库

php - Laravel:使用 Faker 播种多个独特的列

php - 从非日期时间格式的字段中获取记录

sql - 如何在 where 子句中使用正则表达式来过滤 Postgres 中的行?

php - Laravel Eloquent OR WHERE IS NOT NULL

database - 无法连接到postgresql中的数据库

java - 第一次尝试设置测试数据库但得到 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure

php - 如何在 codeigniter 中将数据从 post 传递到 ajax

Mysql集群自增配置

MySQL 与 sql_mode=only_full_group_by 不兼容