SQL MIN()小/大不能正常工作

时间:2013-01-22 20:11:31

标签: sql

我在DB中有这个数据

CREATE TABLE Stu_Table
(
    Stu_Id VARCHAR(2),
    Stu_Name VARCHAR(15), 
    Stu_Class VARCHAR(10),
    sub_id VARCHAR(2),
    marks VARCHAR(3)
);

INSERT INTO Stu_Table VALUES (1, 'Komal', 10, 1, 45);
INSERT INTO Stu_Table VALUES (2, 'Ajay', 10, 1, 56);
INSERT INTO Stu_Table VALUES (3, 'Rakesh', 10, 1, 67);
INSERT INTO Stu_Table VALUES (1, 'Komal', 10, 2, 47);
INSERT INTO Stu_Table VALUES (2, 'Ajay', 10, 2, 53);
INSERT INTO Stu_Table VALUES (3, 'Rakesh', 10, 2, 57);
INSERT INTO Stu_Table VALUES (1, 'Komal', 10, 3, 45);
INSERT INTO Stu_Table VALUES (2, 'Ajay', 10, 3, 56);
INSERT INTO Stu_Table VALUES (3, 'Rakesh', 10, 3, 67);
INSERT INTO Stu_Table VALUES (1, 'Komal', 10, 4, 65);
INSERT INTO Stu_Table VALUES (2, 'Ajay', 10, 4, 56);
INSERT INTO Stu_Table VALUES (3, 'Rakesh', 10, 4, 37);
INSERT INTO Stu_Table VALUES (1, 'Komal', 10, 5, 65);
INSERT INTO Stu_Table VALUES (2, 'Ajay', 10, 5, 46);
INSERT INTO Stu_Table VALUES (3, 'Rakesh', 10, 5, 63);

我正在对这些数据进行此查询。

SELECT *
FROM
(
    SELECT
        Stu_Id,
        MIN(marks) AS mini,
        AVG(marks) AS per
    FROM stu_table
    GROUP BY stu_id
    HAVING MIN(marks) > 45
);

我得到了这个:

Stu_Id| mini  |  per
   1  |  45   |  53.4
   2  |  46   |  53.4
   3  |  37   |  58.2

我不明白为什么当我在查询中清楚地显示1时,我仍然会看到 Stu_Id HAVING min(marks)>45,其中min(mark)= 45。

Runnable Demo

FIX: 感谢@sybkar和@Martin Smith!

我将标记类型设置为字符串。 它应该是INT ......

谢谢你们! 工作完美!

create table Stu_Table(Stu_Id INT(2), Stu_Name varchar(15), 
Stu_Class  varchar(10),sub_id INT(2),marks INT(3));<--INT!!!

1 个答案:

答案 0 :(得分:3)

  

我不明白为什么我仍然看到 Stu_Id 1与min(mark)= 45   当我在查询中清楚地显示此HAVING min(marks)>45时。

你没有。或者至少你提供的演示没有。

一般来说,你得到的任何奇怪的结果都是因为marks被存储为字符串,所以MIN(marks)将按字母顺序返回最早的结果。

例如HAVING MIN(marks) > 45也会带回56789