web-dev-qa-db-fra.com

SQL Comment sélectionner 5 valeurs maximum dans la table?

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.

4
gzml

Cela devrait le faire

SELECT id, num1 + num2 AS total FROM table1 ORDER BY num1 + num2 DESC LIMIT 5
3
fallenland

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
1
Vaibhav Chopade

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)
1
mochalygin

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.

1
Tushar Gite

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
0
realbart

Utilisez join à la place 

select * from  table1 as t1 , 
table2 as t2 
where t1.id = t2.id 
order by t2.id desc limit 5 ;
0
mithlesh kaushik

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 )
0
ManuelJE

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
0
Hara Prasad