如何在行值SQL之间获取数值范围

时间:2016-05-05 17:34:39

标签: sql

我有一张表格,显示等级和百分比。

现在我想在表格上运行查询,以获取这些百分比之间的等级 示例如果学生获得72%我想将成绩显示为C 如何从表中获得成绩?

请参考此表图片:

enter image description here

5 个答案:

答案 0 :(得分:2)

Drop Table Grades
Drop Table Students

Create Table Students (Name Varchar(200), Percentage Numeric(5,2))
Insert Students Values ('John', 0.00)
Insert Students Values ('Jane', 38.00)
Insert Students Values ('Joe', 45.00)
Insert Students Values ('Greg', 50.00)
Insert Students Values ('Buck', 55.00)
Insert Students Values ('Harold', 60.00)
Insert Students Values ('Jack', 65.00)
Insert Students Values ('Bill', 68.00)
Insert Students Values ('Gerald', 75.00)
Insert Students Values ('Steve', 79.00)
Insert Students Values ('Walter', 85.00)
Insert Students Values ('Mike', 92.00)
Insert Students Values ('Mary', 100.00)
Insert Students Values ('Mark', 101.00)
Select * From Students

Create Table Grades (Grade Char(2), Percentage Numeric(5,2))
Go
Insert Grades Values ('A*', 101.00)
Insert Grades Values ('A', 85.00)
Insert Grades Values ('B', 75.00)
Insert Grades Values ('C', 65.00)
Insert Grades Values ('D', 55.00)
Insert Grades Values ('E', 45.00)
Insert Grades Values ('F', 0.00)

Select S.*, G.Grade
    From
        (
        Select  *, IsNull(Lead(Percentage) Over (Order By Percentage), (Select Max(Percentage)+.01 From Grades)) NextPercentage 
            From Grades ) G
    Join Students S On S.Percentage >= G.Percentage And S.Percentage < G.NextPercentage

答案 1 :(得分:0)

ORDER BY Percentage DESC <= WHERE中的百分比和TOP 1 Grade将获得预期结果

CREATE TABLE #GradeMaster (Grade VARCHAR(2), Percentage DECIMAL(5,2))

INSERT INTO #GradeMaster
SELECT 'A*', 101 UNION
SELECT 'A', 85 UNION
SELECT 'B', 75 UNION
SELECT 'C', 65 UNION
SELECT 'D', 55 UNION
SELECT 'E', 45 UNION
SELECT 'F', 0 

SELECT TOP 1 Grade
FROM #GradeMaster 
WHERE Percentage <= 72
ORDER BY Percentage DESC

DROP TABLE #GradeMaster

答案 2 :(得分:0)

  select grade from table1 where precentage in (
  select max(percentage) from table1 where 72 > percentage);

你可以用72代替你喜欢的分数。没有2个选择可能有办法做到这一点,但这应该有用。

答案 3 :(得分:0)

您可以按限制1使用订单

select grade from my_table
where  percentage <= 72 
order by percentage desc
limit 1;

答案 4 :(得分:0)

假设可能还有学生表和作业表......我认为查询查询看起来像这样。以下内容将为您提供所有学生,无论他们是否有任何评分作业。或者,如果您已经汇总了整体成绩,则可以直接加入学生表。

SELECT
S.*,
A.*,
G.grade
FROM
Student S
LEFT OUTER JOIN Assignment A ON S.Student_id = A.Student_id
LEFT OUTER JOIN Grade G ON A.Percentage >= G.Percentage AND A.Percentage < G.Percentage