簡體   English   中英

在SQL中選擇准確的值

[英]Selecting exact value in SQL

我堅持查詢並決定在這里尋求幫助。 我有2個表學生價值觀 在學生中我有名字價值觀我有成績。

假設我們有3 名學生

**X** 7,8,10
**Y** 6,9,7
**Z** 7 

如何選擇等級為“7”的學生? 我試過了:

SELECT WHERE grade = 7但考慮到有“7”的學生,也考慮其他成績。

我認為這個問題很棘手,有人可以提一下嗎?

一種方法是使用無條件和有條件計數之間的比較:

select s.student_name
from   students s join grades g on s.student_id = g.student_id
group by student_id
having count(*) = count(case when g.value = 7 then 1 end)
;

(猜測沿途的一些列名)

工作原理:加入兩個表后,行按student_id分組。 然后COUNT(*)計算所有等級,條件計數將等級計為等於7.當兩個計數相等時(即所有等級為7),查詢返回學生姓名。

另一種解決方案(效率較低):

select s.student_name 
from   students s inner join grades g on s.student_id = g.student_id
where  g.grade = 7
minus
select s.student_name
from   students s inner join grades g on s.student_id = g.student_id
where  g.grade != 7 or g.grade is null
;

一種簡單的方法是查看這樣的任務:找到沒有七年級以上成績的學生。

select *
from students
where not exist
(
  select *
  from grades
  where grades.student_id = students.student_id
  and grades.grade <> 7
);

要么

select *
from students
where student_id not in
(
  select student_id
  from grades
  where grade <> 7
);

我認為INNER JOIN后跟一個獨有的LEFT JOIN就可以了。 像這樣的東西:

WITH

seven AS (
  SELECT a.id, a.name, b.grade
  FROM student_name a
  INNER JOIN student_grade b
  ON a.id = b.id
  WHERE b.grade = '7'
  )

, not_seven AS (
  SELECT a.id, a.name, a.grade
  FROM seven a
  LEFT JOIN student_grade
  ON a.id = b.id
  WHERE b.id IS NULL
  AND b.grade <> '7'
  )

SELECT * FROM not_seven;

怎么用count和sum? 那會有用嗎?

   select s.student, Count(v.grade), sum(v.grade)
   From student as s 
        join values as v on v.student = s.student
   group by student
   having sum(v.grade) = 7 and count(v.grade) = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM