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.
essaye ça;
select gid
from `Gd`
group by gid
having count(*) > 10
order by lastupdated desc
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
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
essayer
SELECT DISTINCT gid
FROM `Gd`
group by gid
having count(*) > 10
ORDER BY max(lastupdated) DESC
Juste version académique sans clause:
select *
from (
select gid, count(*) as tmpcount from Gd group by gid
) as tmp
where tmpcount > 10;
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;
- 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
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()
;