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

标签 sql

我在数据库中有这些数据

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

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

Runnable Demo

修复:
感谢@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!!!

最佳答案

I don't understand why I still see Stu_Id 1 with min(mark)=45 when I clearly have this HAVING min(marks)>45 in my query.



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

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

例如 HAVING MIN(marks) > 45还会带回来5 , 6 , 7 , 89

关于SQL MIN() 更小/更大不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14467165/

相关文章:

sql - 将datetime2数据类型转换为datetime数据类型导致超出范围?

SQL Server varchar(50)和varchar(128)的性能差异

MySQL : 1 relational table with 3 colmuns OR 3 relational tables with 2 columns?

java - 我们如何使用 prepareStatement()?

mysql - 连接两个表,但如何显示所有结果?

sql - 删除重复的行并更新引用

mysql - SQL 连接 3 个具有空值的表

mysql - 对 MySQL 数据库进行动态 SQL 查询

sql - 数据仓库模型方法

sql - 操纵选择查询的输出