web-dev-qa-db-fra.com

MySQL - Utilisation de COUNT (*) dans la clause WHERE

J'essaie d'accomplir ce qui suit avec MySQL (voir le code pseudo)

SELECT DISTINCT gid
FROM `Gd`
WHERE COUNT(*) > 10
ORDER BY lastupdated DESC

Y a-t-il un moyen de faire cela sans utiliser (SELECT ...) dans la clause WHERE car cela semblerait être un gaspillage de ressources.

146
Ice

essaye ça;

select gid
from `Gd`
group by gid 
having count(*) > 10
order by lastupdated desc
249
Ali Ersöz

Je ne suis pas sûr de ce que vous essayez de faire ... peut-être quelque chose comme

SELECT gid, COUNT(*) AS num FROM Gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC
26
Greg
SELECT COUNT(*)
FROM `Gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC;

EDIT (si vous voulez juste les enfants):

SELECT MIN(gid)
FROM `Gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC
15
Winston Smith

essayer

SELECT DISTINCT gid
FROM `Gd`
group by gid
having count(*) > 10
ORDER BY max(lastupdated) DESC
14
sme

Juste version académique sans clause:

select *
from (
   select gid, count(*) as tmpcount from Gd group by gid
) as tmp
where tmpcount > 10;
12
Máťa - Stitod.cz

Il ne peut y avoir de fonctions d'agrégat (Ex. COUNT, MAX, etc.) dans une clause WHERE. Par conséquent, nous utilisons plutôt la clause HAVING. Par conséquent, toute la requête serait semblable à ceci:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
8
pushkarr

- recherche de stations météorologiques avec des données manquantes toutes les demi-heures

SELECT stationid
FROM weather_data 
WHERE  `Timestamp` LIKE '2011-11-15 %'  AND 
stationid IN (SELECT `ID` FROM `weather_stations`)
GROUP BY stationid 
HAVING COUNT(*) != 48;

- variation de yapiskan avec un où .. dans .. sélectionnez

6
zzapper

je pense que vous ne pouvez pas ajouter count() avec where. maintenant voir pourquoi ....

where n'est pas la même chose que having, having signifie que vous travaillez ou avez affaire à un groupe et que le même travail de comptage est traité; il s'agit également de l'ensemble du groupe.

maintenant comment compter cela fonctionne en tant que groupe entier

créer une table et entrer quelques identifiants puis utiliser:

select count(*) from table_name

vous trouverez le total des valeurs signifie qu'il indique un groupe! donc where est ajouté avec count();

1
Tushar Pandey