【问题标题】:How To Fetch Records using MySQL With Multiple Min and Max Conditions?如何使用具有多个最小和最大条件的 MySQL 获取记录?
【发布时间】:2016-11-17 06:05:23
【问题描述】:

表格外观

StudentId, SubjcetName, Marks
1          Maths        50
1          Science      80
1          Language     70
2          Maths        80
2          Science      50
2          Language     60
3          Maths        85
3          Science      95
3          Language     60

我想从这张表中获取记录 - 谁在数学中获得最低分数:50 和最高分数:90,以及谁在科学中获得低于 75 分。

I 例外结果

1 Maths 50
2 Maths 80
2 Science 50
3 Maths 85

如何形成查询得到结果?

注意:主题是动态的,min 和 max 也可以适用于任何主题。

【问题讨论】:

  • SELECT StudentId, SubectName,Marks, (CASE WHEN SubectName='Maths' THEN Marks ELSE END) as MathsMarks, (CASE WHEN SubectName='Science' THEN Marks ELSE END) as ScienceMarks, (CASE WHEN SubectName='Language' THEN Marks ELSE END) as LanguageMarks FROM StundetTable WHERE Status'Active' HAVING MathsMarks >=50 AND MathsMarks

标签: mysql mysql-5.7


【解决方案1】:

试试这个

(SELECT StudentId, SubjcetName, Marks 
FROM table
WHERE SubjcetName = 'Maths'
AND Marks BETWEEN 50 AND 90)
UNION
(SELECT StudentId, SubjcetName, Marks 
FROM table
WHERE SubjcetName = 'Science'
AND Marks < 75)

【讨论】:

  • 谢谢,还有其他方法吗?因为如果主题数量越多,那么联合查询的数量就会越多。最重要的是,我有过滤条件 StudentId 和状态等
  • 预期结果:[StudentId,SubjcetName,Marks 1 数学 50 1 科学 80 1 语言 70 2 数学 80 2 科学 50 2 语言 60]
【解决方案2】:

请尝试以下查询,

 SELECT StudentId, SubjcetName, Marks  FROM tablename
 WHERE Marks BETWEEN 50 AND 90
 AND SubjcetName="Maths"
 OR
(Marks < 75 AND SubjcetName="Science")

这对我有用。

【讨论】:

  • 我认为,当我们应用更多过滤条件时,此查询将不起作用。因为如果满足一个条件,“或”将获取记录
  • 请在所有条件的最后加上“或”条件
  • SELECT studentid、subjectname、marks ,status FROM student WHERE 分数介于 50 和 90 AND subjectname="maths" AND studentid="1" AND status="Active" OR (marks
  • 这可能会有所帮助
  • 谢谢@hetal gohel,这里还有一个挑战,如果条件匹配,那么这些学生需要获取所有科目的分数。学生 1 和学生 2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 2011-04-23
相关资源
最近更新 更多