只用到一个表sellers
id  seller  product          keyword      price
1   沃尔玛   泰国稻米得大米       大米          6
2   沃尔玛   东北小麦粉           麦            3
3   百佳     东北大米             大米          3
4   家乐福   东北大米             大米          3.2
5   好又多   超级小麦面粉         麦            3.5    
6   永辉     湖北大米             大米          2.8我想查出这个表里每一类价格最便宜的行,也即字段product值中包含了字段keyword值的结果中价格最便宜的行,比如这个表里出来的结果就是以下两行结果
6   永辉     湖北大米             大米          2.8
2   沃尔玛   东北小麦粉           麦            3
这个语句怎么写?谢谢!!

解决方案 »

  1.   

    SELECT * FROM sellers A
    WHERE NOT EXISTS(SELECT 1 FROM sellers B WHERE A.keyword = B.keyword and A.price > B.price)
      

  2.   

    这样的一般习惯用Group by语法。也给一个,不过是在MySql运行通过的,呵呵。select t.* from sellers t
    right join 
    (SELECT min(price) as price,keyword FROM sellers group by keyword) temp
    on temp.price=t.price and temp.keyword = t.keyword
    order by t.keyword
      

  3.   

    谢谢这位哥。如果这个表变成这样呢(只是把keyword值改了一点点)
    id  seller  product          keyword      price
    1   沃尔玛   泰国稻米得大米       米            6
    2   沃尔玛   东北小麦粉           麦            3
    3   百佳     东北大米             大米          3
    4   家乐福   东北大米             米            3.2
    5   好又多   超级小麦面粉         麦            3.5    
    6   永辉     湖北大米             大米          2.8
    怎么查?因为原本这个A.keyword不一定等于B.keyword,只要是keyword的值被包含在了product值里就行
    谢谢哥再帮忙看下!
      

  4.   


    select * from seller d where price in (select min(price) from seller k where d.keyword=k.keyword group by keyword  )