mysql结果与括号不同

时间:2014-05-10 16:04:00

标签: mysql sql

我试图找到学生的ID,其得分低于特定学生的最低百分比(StuID = 1027,我知道他们的最低分数是33)。 如果我使用以下命令,我会得到相当多的结果

mysql> SELECT DISTINCT STUID FROM uniData WHERE PERCENT < 33;
+-------+
| STUID |
+-------+
|  1001 |
|  1010 |
|  1012 |
|  1016 |
|  1017 |
|  1022 |
|  1032 |
|  1034 |
|  1045 |
|  1048 |
|  1055 |
+-------+
11 rows in set, 3 warnings (0.00 sec)

如果我想找到这个特定学生的最低分,我会使用以下代码,结果如下:

mysql> SELECT  MIN(PERCENT) FROM uniData WHERE STUID = 1027;
+--------------+
| MIN(PERCENT) |
+--------------+
| 33           |
+--------------+
1 row in set (0.00 sec)

但是,如果我把它放在一起,我只会选择一个学生证:

mysql> SELECT DISTINCT STUID FROM uniData WHERE PERCENT < (SELECT  MIN(PERCENT) FROM uniData WHERE STUID = 1027);
+-------+
| STUID |
+-------+
|  1055 |
+-------+
1 row in set (0.00 sec)

为什么mysql对此有不同的解释?我该如何修改我的第三个查询,以便得到与第一个查询相同的结果?

如果我使用&#39; LIKE&#39;那似乎并不重要。或&#39; =&#39;。 删除DISTINCT似乎没有效果。 它是第一个列表中最后一个StuID的事实与它有关吗?

3 个答案:

答案 0 :(得分:0)

试试:

  SELECT STUID ,(SELECT  MIN(PERCENT) FROM uniData WHERE STUID LIKE '1027') as mins,
  PERCENT 
  FROM uniData 
  group by STUID
  having `PERCENT` < mins ;

DEMO

您的查询效果很好。 take a look here

答案 1 :(得分:0)

使用以下查询。它可能会帮助你

SELECT a.* from(
   SELECT STUID,MIN(PERCENT)Percent FROM uniData 
   group by STUID
)a where a.Percent < 33;

答案 2 :(得分:-1)

你可以在

之间使用
SELECT DISTINCT STUID FROM uniData WHERE PERCENT between(0,(SELECT  MIN(PERCENT) FROM uniData WHERE STUID LIKE '1027'))