7
votes

Compter à partir d'une table, mais arrêtez de compter à un certain nombre

Y a-t-il un moyen dans MySQL à Count (*) code> à partir d'une table où si le numéro est supérieur à x code>, il cessera de compter là-bas? Fondamentalement, je veux seulement savoir si le nombre d'enregistrements renvoyés d'une requête est plus ou inférieur à un nombre particulier. Si c'est plus que ce numéro, je ne me soucie pas vraiment du nombre de lignes qu'il y a, si c'est moins, dites-moi le comte.

J'ai été capable de le fumer comme ceci: P>

-- let x be 100

SELECT COUNT(*) FROM (
    SELECT `id` FROM `myTable`
    WHERE myCriteria = 1
    LIMIT 100
) AS temp


3 commentaires

Je crains que dans ce cas, vérifier si le nombre de comptes ()> 100 ou comptez ()> 1000 ou compter ()> 10000 ne fera aucune différence.


oui je sais, c'est pourquoi je fais la sous-requête avec la limite, je me demandais s'il y avait une meilleure façon


J'ai supprimé ma réponse lorsque j'ai vu votre édition / intention. Je suppose que votre réponse dans votre question est la plus optimale


3 Réponses :


8
votes
SELECT * FROM WhateverTable WHERE WhateverCriteria
LIMIT 100, 1
LIMIT 100, 1 returns 101th record, if there is one, or no record otherwise. You might be able to use the above query as a sub-query in EXIST clauses, if that helps.

4 commentaires

Cela ne me va pas. Cela ne comprendra-t-il que des identifiants survenus plus de 100 fois? Si chaque identifiant est unique, bonne chance avec ça!


J'ai édité le post. "Ayant" est utilisé conjointement avec "groupe par" et "groupe par" n'est pas nécessaire dans ce cas.


Merci Salman - J'ai mis à jour mes questions pour mieux expliquer ma situation.


Je sais que je suis quelques années de retard au jeu ici, mais je voulais mentionner que c'est une excellente solution. Merci!



1
votes

Je ne peux penser à rien. Cela me ressemble à ce que vous faites exactement remplit le but et SQL ne semble certainement pas sortir de sa manière de vous rendre facile pour vous de le faire plus succinctement.

Considérez ceci: qu'est-ce que vous essayez de faire n'a de sens dans un contexte strict d'arithmétique fixe. Mathématiquement, la réponse est de tout compter, puis de prendre le min () avec 100, ce qui est ce que vous êtes (pragmatiquement et avec une bonne raison) essayant d'éviter.


0 commentaires

0
votes

Ceci fonctionne:

select count(*) from stockinfo


1 commentaires

Du manuel: Count (*) est optimisé pour revenir très rapidement si le SELECT RESPIENNE à partir d'une table, aucune autre colonne n'est récupérée et qu'il n'y a pas de clause d'où. Cette optimisation s'applique uniquement aux tables MyISAM uniquement, car un nombre de lignes exactes est stocké pour ce moteur de stockage et peut être consulté très rapidement.