+------+------------+---------+
| s_id | f_name     | attr |
+------+------------+---------+
|  101 | apple      |   1 |
|  102 | apple     |  2 |
|  103 | apple     |   3 |
|  104 | berry      |  1 |
|  105 | berry      |   2 |
|  106 | orange   |  2 |
|  107 | orange   |   3 |
|  108 | cherry     | 1 |
|  109 | lemon      |2 |
|  110 | mango      | 1 |
|  111 | xbabay     | 3 |我想取出每种f_name,属性attr为1的所有行,如果f_name名字下没有attr等于1的行,那么取出其他第一个属性对应的行。‘这个怎么实现?最后应该是
|  101 | apple      |   1 |
|  104 | berry      |  1 |
|  106 | orange   |  2 |
|  108 | cherry     | 1 |
|  109 | lemon      |2 |
|  110 | mango      | 1 |
|  111 | xbabay     |3 |求sql语句

解决方案 »

  1.   

    取 attr  最小的行。 N=1
    参考下贴中的多种方法http://blog.csdn.net/acmain_chm/article/details/4126306
    [征集]分组取最大N条记录方法征集,及散分....<
      

  2.   

    select *from 表 order by atter limit 0,1
      

  3.   

    select t1.s_id ,  t1.atter ,  t1.apple from 表 as t1
    inner jion 
    (select min(atter) as atter ,  apple from 表 group by apple )   as t2
    on t1. atter  = t2.atter  and t1.apple  = t2.apple 
      

  4.   

    其实就是group by,没那么复杂
      

  5.   

    如果只是得到LZ说的结果感觉就是一个group by的事
    select * from 表名 order by f_name;
      

  6.   

    改一下上面说的,打错字了,是select * from 表名 group by f_name;