2

私はこのデータを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

クエリにこれが明確に含まれているのに、なぜmin(mark)=45のStu_Id が表示されるのかわかりません。1HAVING min(marks)>45

実行可能なデモ

修正: @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!!!
4

1 に答える 1

3

クエリにこれが明確にあるのに、min(mark)=45の Stu_Id がまだ表示される理由がわかりません。1HAVING min(marks)>45

あなたはそうしない。または、少なくとも提供したデモはそうではありません。

一般に、取得している奇妙な結果はmarks、文字列として保存されているMIN(marks)ため、アルファベット順で最も古いものを戻すためです。

たとえばHAVING MIN(marks) > 45、、、、および5_ 6_ 7_89

于 2013-01-22T20:56:37.343 に答える