Dans ma base de données, j'ai deux tables et je veux sélectionner les 5 valeurs les plus élevées de la table, mais je n'obtiens que la première valeur la plus élevée. Il est impossible d'obtenir plus d'une valeur.
Voici mon SQL,
SELECT * FROM table1 WHERE id=(SELECT id, MAX(num1+num2) FROM table2 limit 5)
Comment puis-je obtenir le premier top 5 des valeurs les plus élevées?
Merci.
Cela devrait le faire
SELECT id, num1 + num2 AS total FROM table1 ORDER BY num1 + num2 DESC LIMIT 5
Vous pouvez sélectionner les 5 meilleurs enregistrements en tant que
Select Top 5 RestaurantID, RestaurantName,Address,ProfileImage from Restaurant_Details order by DisplayRating Desc
Vous devez utiliser l'opérateur IN dans votre requête. Ainsi, la sous-requête ne doit renvoyer qu'une colonne (ceci est nécessaire pour que l'opérateur IN fonctionne).
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2 ORDER BY num1+num2 DESC LIMIT 5)
Vous pouvez écrire comme ça.
SELECT top 5 * FROM table1 WHERE id IN (SELECT id,MAX(num1+num2) FROM table2) ORDER BY id DESC
Cela vous aidera.
En fonction de votre dialecte sql:
MySQL:
SELECT id, num1 + num2 FROM table1 ORDER BY num1 + num2 DESC LIMIT 5
Serveur 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
Utilisez join
à la place
select * from table1 as t1 ,
table2 as t2
where t1.id = t2.id
order by t2.id desc limit 5 ;
Gardez à l'esprit que MAX () est une fonction d'agrégation, vous n'aurez toujours qu'une réponse en réponse lorsque vous la mettez dans la liste des champs.
Vous utilisez ORDER BY et LIMIT dans la requête interne pour extraire 5 valeurs au maximum (la table2 pourrait être plus petite):
SELECT id FROM table2 ORDER BY num1+num2 DESC LIMIT 5
Ensuite, vous choisissez les autres informations encapsulant cette requête avec un IN (...)
SELECT * FROM table1 WHERE id IN ( SELECT id, num1+num2 FROM table2 ORDER BY num1+num2 LIMIT 5 )
Vous devez utiliser l'opérateur IN dans votre requête. Donc, la sous-requête ne doit renvoyer qu'une colonne
SELECT * FROM table1 WHERE id IN (SELECT MAX(num1+num2) FROM table2) ORDER BY id DESC limit 5