Comment pouvons-nous sélectionner la deuxième plus grande marque ou quelque chose d'un tableau sans utiliser la LIMIT? Je sais que c'est possible en utilisant LIMIT, mais est-ce possible sans l'utiliser? Supposons que nous ayons les colonnes id et les marques.Sélectionnez la deuxième plus grande d'une table sans limite
Répondre
En supposant que les marques sont uniques, la requête suivante vous donne la deuxième plus grande marque.
SELECT MAX(marks)
FROM ATable
WHERE marks < (SELECT MAX(marks) FROM ATable)
Pour obtenir l'ensemble du dossier, vous pouvez envelopper cela dans un INNER JOIN
SELECT t1.*
FROM ATable t1
INNER JOIN (
SELECT marks = MAX(marks)
FROM ATable
WHERE marks < (SELECT MAX(marks) FROM ATable)
) t2 ON t2. marks = t1.marks
Pour MySql: select * from atable où marques = (sélectionnez max (marques) comme secmax de atable où marques < (Sélectionnez max (marques) de atable)) – dharm0us
est le '(SELECT MAX (marques) FROM ATable)' être encaissé ou cette requête s'exécute pour chaque ligne? parce que cette approche est très lente sur une table avec environ 1000 lignes, merci –
@Gabriel - notez que la requête ne renvoie jamais qu'une seule ligne. Sur une table indexée appropriée, cela se traduit par une recherche d'index et une recherche d'index. Cela ne devrait pas être un problème pour tout moteur de base de données qui en vaut la peine. –
select max(number), id
from <tableName>
where number < (select max(number) from <tableName>)
Vous pouvez faire un
SELECT MAX(marks) FROM TABLE
WHERE marks NOT IN (SELECT MAX(marks) FROM TABLE)
mais LIMIT doit effectuer mieux que ce qui précède, alors la question est pourquoi vous ne l'aimez pas?
Si vous avez besoin d'une ligne entière (toutes les colonnes), celle-ci le fera. De plus, il retournera toujours une seule ligne, même s'il y en a plusieurs avec la même 2ème valeur max.
Select top 1 *
From (Select Top 2 *
From TABLE
Order By marks desc
) a
Order By marks asc
Si vous voulez seulement une ligne avec une réelle 2ème valeur maximale, vous devez utiliser:
select Top 1 *
from TABLE
where marks < (select max(marks) from TABLE)
Order by max desc
Il pourrait être fait par CTE (SQL Server 2005+) aussi:
;With a as
(
Select Dense_Rank() over (order by marks desc) as nRank,
*
From TABLE
)
Select Top 1 *
from a
Where nRank=2
Si vous souhaitez voir toutes les lignes avec les marques max 2, supprimez simplement TOP 1 de la requête précédente.
- 1. Comment trouver la deuxième plus grande valeur d'une table.?
- 2. requête pour obtenir 3ème plus grande quantité et 2ème plus grande quantité de la table
- 3. Sélectionnez la limite maximale 1 du groupe
- 4. Jquery - Sélectionnez la deuxième étiquette de style
- 5. Sélectionnez le plus récent de la table mysql
- 6. Sélectionnez la table Javascript
- 7. Une table vue cell/row plus grande que les autres?
- 8. plus efficace de se joindre à gauche grande table
- 9. Quelle est la plus grande limite d'écran des éléments dynamiques d'un SWF (Flash) SWF
- 10. table HTML impression grande colonne
- 11. Dois-je casser une table mysql plus grande en plusieurs?
- 12. SÉLECTIONNEZ DANS la même table
- 13. Ajout d'une colonne à une table (en utilisant jQuery) rend la table plus grande, pourquoi?
- 14. Saisie de procédure stockée sans limite
- 15. app moteur grande table
- 16. Grande table MySQL - Conseil nécessaire
- 17. rotation grande table ajax
- 18. simple sélectionnez nième plus haut
- 19. Dépassement de la limite de la mémoire Wordpress dépassée, SANS modification de la limite du serveur
- 20. Sélection récursive de la plus grande récursivité dans MySQL
- 21. Sélectionnez n valeurs les plus élevées d'une table
- 22. MySQL comptant la plus grande valeur
- 23. La plus grande taille de Windows Cursor
- 24. La plus grande colonne non nulle
- 25. Sélectionnez statemant avec jointure ou limite de sous-requête
- 26. JQuery et clonage grande table
- 27. Après une grande suppression de la table?
- 28. MySQL JOIN/GROUP_CONCAT deuxième table?
- 29. Comment puis-je obtenir la position nième ligne de la table sans utiliser de limite?
- 30. table mysql joindre sélectionnez
Qu'est-ce qui ne vous plaît pas à propos de LIMIT? – Unreason
qui était une question d'entrevue;) – viMaL
Je pense que la question aurait pu être de le résoudre sans utiliser ORDER BY et LIMIT. depuis order par require trier dans O (n * log (n)), alors que l'enquêteur recherchait O (n) – dharm0us