データベースに2つのテーブルがあり、テーブルから最も高い5つの値を選択したいのですが、最初に最も高い値しか取得できず、複数の値を取得できません。
これが私のSQLです、
SELECT * FROM table1 WHERE id=(SELECT id, MAX(num1+num2) FROM table2 limit 5)
最初の上位5つの最高値を取得するにはどうすればよいですか?
ありがとう。
これはそれをするべきです
SELECT id, num1 + num2 AS total FROM table1 ORDER BY num1 + num2 DESC LIMIT 5
このように書くことができます。
SELECT top 5 * FROM table1 WHERE id IN (SELECT id,MAX(num1+num2) FROM table2) ORDER BY id DESC
これはあなたを助けます。
上位5件のレコードを選択できます
Select Top 5 RestaurantID, RestaurantName,Address,ProfileImage from Restaurant_Details order by DisplayRating Desc
クエリでIN演算子を使用する必要があります。したがって、サブクエリは1列のみを返す必要があります(これはIN演算子が機能するために必要です)。
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2 ORDER BY num1+num2 DESC LIMIT 5)
代わりにjoin
を使用してください
select * from table1 as t1 ,
table2 as t2
where t1.id = t2.id
order by t2.id desc limit 5 ;
あなたのSQL方言に応じて:
MySQL:
SELECT id, num1 + num2 FROM table1 ORDER BY num1 + num2 DESC LIMIT 5
SQLサーバー:
SELECT TOP 5 id, num1 + num2 FROM table1 ORDER BY num1 + num2 DESC
Oracle:
SELECT id, num1 + num2 FROM table1 WHERE ROWNUM <= 5 ORDER BY num1 + num2
MAX()は集計関数であることを覚えておいてください。フィールドリストに入れた場合、応答として返されるのは常に1行だけです。
内部クエリでORDER BYとLIMITを使用して、最大5つの値をフェッチします(table2の方が小さい場合があります)。
SELECT id FROM table2 ORDER BY num1+num2 DESC LIMIT 5
次に、そのクエリをラップする他の情報をIN(...)
SELECT * FROM table1 WHERE id IN ( SELECT id, num1+num2 FROM table2 ORDER BY num1+num2 LIMIT 5 )
クエリでIN演算子を使用する必要があります。したがって、サブクエリは1列のみを返す必要があります
SELECT * FROM table1 WHERE id IN (SELECT MAX(num1+num2) FROM table2) ORDER BY id DESC limit 5