12
votes

MySQL ne renvoie qu'une seule ligne lors de l'utilisation de comptes

Eh bien, je viens de frapper un comportement étrange que je n'ai jamais vu auparavant, ou je n'ai pas remarqué.

J'utilise cette requête: xxx

... ... Pour lire 3 articles mais en faisant que je veux obtenir les lignes totales.

problème est ...

... Quand j'utilise compter la requête ne revient que une ligne, mais si je suppose Comptez (*) comme pages - Je reçois les 3 lignes comme je suis supposée. Évidemment, je manque quelque chose ici.


6 commentaires

Vous avez besoin de quelque chose comme les fonctions de fenêtre qui ne sont malheureusement pas étayées par MySQL. Vous devrez faire deux requêtes distinctes.


Ensuite, les données n'appartiennent pas ensemble. Ce qu'il demande réellement, c'est semblable à "pour les trois premières personnes du département 20, donnez-moi leur prénom et son nom de famille et le nombre total de personnes dans le département 20." Oui, vous pouvez demander cela, mais il n'a pas de sens de demander cela, car vous obtiendrez trois fois le nombre total de personnes au départ.


Eh bien, c'est vraiment ce stupide d'une question, je veux dire qu'il me semble que vous me semble assez logique que vous demandez une personne totale dans un département et obtenez les informations sur les 3 premiers que «déplacés»


@Breezer, puis demandez cela: Sélectionnez Count (*) de Noisetis où CID = 20; Sélectionnez * à partir de NOTIS où CID = 20 limite 0,3


@Breezer vous demandez deux morceaux de données disparates. Demandez-les séparément, n'essayez pas de les combiner dans une seule requête où elle n'a pas de sens.


oui j'ai compris cela maintenant, mais j'espérais que je n'aurais pas besoin de faire 2 questions à nouveau le dB


3 Réponses :


11
votes

Utiliser une fonction d'agrégation sans un groupe en retournera toujours une ligne, peu importe quoi. Vous devez utiliser un groupe par si vous souhaitez retourner plus d'une ligne.

Notez que sur la plupart des RDBM, une telle requête aurait échoué car elle n'a aucun sens.


2 commentaires

Mais si j'utilise le groupe par la fonction de comptage renvoie 1 en résultat


Oui, comme le dit Pablo Santa Cruz, vous devriez utiliser une fonction de fenêtre, mais elle n'est pas prise en charge par MySQL. Vous devrez faire 2 questions.



15
votes

Ouais, le comte est un opérateur agrégé, qui ne rend qu'une ligne renvoyée (sans groupe par clause)

peut-être faire deux requêtes distinctes? Il n'a pas de sens que la ligne renvoie les données et le nombre total de lignes, car ces données n'appartiennent pas ensemble.

Si vous le voulez vraiment vraiment, vous pouvez faire quelque chose comme ceci: xxx

ou ceci: xxx

avec des variances sur l'expression imbriquée en fonction de votre dialecte SQL. < / p>


1 commentaires

ouais cela semble être le dernier recours à faire deux appels, merci



3
votes

Ceci est inefficace, mais fonctionnera: xxx


0 commentaires