Ich versuche folgendes in MySQL zu erreichen (siehe pseudo
code)
SELECT DISTINCT gid
FROM `Gd`
WHERE COUNT(*) > 10
ORDER BY lastupdated DESC
Gibt es eine Möglichkeit, dies zu tun, ohne ein (SELECT ...) in der WHERE-Klausel zu verwenden, da dies eine Verschwendung von Ressourcen zu sein scheint.
versuche dies;
select gid
from `Gd`
group by gid
having count(*) > 10
order by lastupdated desc
Ich bin mir nicht sicher, was Sie versuchen ... vielleicht so etwas
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;
BEARBEITEN (wenn Sie nur die Gids wollen):
SELECT MIN(gid)
FROM `Gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC
versuchen
SELECT DISTINCT gid
FROM `Gd`
group by gid
having count(*) > 10
ORDER BY max(lastupdated) DESC
Nur akademische Version ohne Klausel:
select *
from (
select gid, count(*) as tmpcount from Gd group by gid
) as tmp
where tmpcount > 10;
In der A WHERE-Klausel dürfen keine Aggregatfunktionen (z. B. COUNT, MAX usw.) enthalten sein. Daher verwenden wir stattdessen die HAVING-Klausel. Daher würde die gesamte Abfrage ungefähr so aussehen:
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;
- Suche nach Wetterstationen mit fehlenden halbstündlichen Aufzeichnungen
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 von Yapiskan mit einem wo .. in .. auswählen
ich denke, Sie können nicht count()
mit where
hinzufügen. jetzt mal sehen warum ....
where
ist nicht dasselbe wie having
, having
bedeutet, dass Sie mit einer Gruppe arbeiten oder es mit derselben Arbeit zu tun haben, sondern mit der gesamten Gruppe.
nun, wie viel zählt es, als ganze Gruppe zu arbeiten
erstelle eine Tabelle und gib einige IDs ein und benutze dann:
select count(*) from table_name
sie werden feststellen, dass die Gesamtwerte bedeuten, dass es sich um eine Gruppe handelt! also wird where
mit count()
hinzugefügt;