我试图找到学生的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的事实与它有关吗?
答案 0 :(得分:0)
试试:
SELECT STUID ,(SELECT MIN(PERCENT) FROM uniData WHERE STUID LIKE '1027') as mins,
PERCENT
FROM uniData
group by STUID
having `PERCENT` < mins ;
您的查询效果很好。 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'))