简单sql查询问题(紫薯紫薯紫薯)

请问sql大牛,我这个有点绕晕了,想不明白:
表数据是这样的:

 id category_name    type    description    
1      james                20       语文
2     curry                34        语文
3     curry                20        数学 
4     james              30      数学
5     curry               30        英语  
6     james              78     英语  

sql:

 SELECT category_name,description FROM category a WHERE TYPE>(
  SELECT MIN(TYPE) FROM category b WHERE a.description=b.description
)

结果:
category_name description
curry 语文
james 数学
james 英语

为什么结果里显示第五条数据过滤掉了?
谁能给分析一下sql执行顺序?谢谢!

在表category中查询出category_name,description数据并且description的type最小值

--查询组合字段为(3)
SELECT category_name,description
---连表为(1)
FROM category a
---查询条件为(2)
WHERE TYPE>(
SELECT MIN(TYPE) FROM category b WHERE a.description=b.description
)

说明顺序为1-3
转自:http://blog.csdn.net/bitcarmanlee/article/details/51004767

TYPE>MIN(TYPE) 你自己去掉了最小分数

不是查的type大于子查询的吗,最开始查到1,3,5三条数据,然后大于这个的

你查询的数据是type的值大于description相同的数据中type的最小值,所以你的数据会将description相同的type值最小的数据去掉

a.description=b.description 第五条和第六条关联会产生多条数据:30 30 78 78 MIN(
TYPE) 以后选择30

然后再再这个基础上,进行第五,第六条的筛选:TYPE>30 ,结果就出来了。
望采纳

看语句的逻辑就是把科目名相同的,type值不是最小的记录列出来。 表中科目名相同的各两条,当然只保留type值大的那条记录,查询结果就是返回三条记录。没毛病呀,很清楚呢。

子查询就是查出同一科目,最小的Type值。