2016-12-03 6 views
1

私は製品の3番目に高いコストを見つけようとしています。 from table tblproducts.i mysql server 5.6を使用しています。サブクエリーは、販売された製品の3番目に高いコストを見つけるために

私は以下のクエリを使用:

select name 
from tblproducts 
where cost IN 
(select distinct top 3 cost 
from tblproducts 
order by cost desc); 

をしかし、私は、クエリを実行するときには、以下のエラーを示しています。

ERROR 1064(42000):あなたは、あなたのSQL構文でエラーが発生しているが、 .........ライン4

で が近くで使用する権利構文についてはMySQLサーバのバージョンに対応していることを手動「コスト12月によってtbbproducts 順から3つのCOS トン )」をチェックします............ 誰かがこのエラーを修正するための構文を助けてくれました。

kyokou。

+0

選択名前を。 (訂正:私はINを使いました。親切にもトップ3の構文で私を助けてください) – ayav

答えて

0
SELECT t1.name 
FROM tblproducts t1 
WHERE (3) = (SELECT COUNT(t2.cost) 
       FROM tblproducts t2 
       WHERE t2.cost >= t1.cost 
      ) 

ここにデモ:

SQLFiddle

更新:

上記のクエリは限りtblproductsに重複コストで製品の可能性がないと正常に動作します。コストの重複の可能性がある場合は、次のように我々は、クエリを変更することができますでのコストが(コストDESCによってtblproducts順序は異なるトップ3のコストを選択)tblproductsから

SELECT t1.name 
FROM tblproducts t1 
WHERE (3) = (SELECT COUNT(t2.cost) 
       FROM (SELECT DISTINCT cost FROM tblproducts) t2 
       WHERE t2.cost >= t1.cost 
      ) 
+0

ya dat worked ..しかし可能ならtop(3)の構文で助けてくれますか? – ayav

+0

'TOP(3)'は有効なMySQL構文ではなく、SQL ServerとAccessでのみ使用されます。 MySQLの 'TOP'の類推は' LIMIT'ですが、これはあなたがしようとしているクエリには役に立たないかもしれません。 –

+0

OK!本当に私の問題を解決しました。 – ayav

関連する問題