MySQL - Utilizzo di COUNT (*) nella clausola WHERE


157

Sto provando a realizzare quanto segue in MySQL (vedi pseudocodice)

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

C'è un modo per farlo senza usare un (SELEZIONA ...) nella clausola WHERE perché sembrerebbe uno spreco di risorse.

Risposte:


265

prova questo;

select gid
from `gd`
group by gid 
having count(*) > 10
order by lastupdated desc

37
+1 per avere Questa è sempre la clausola che non si preoccupano di insegnare correttamente su corsi o libri sql e conoscerlo in generale il segno che il programmatore è progredito oltre il livello dei principianti.
Cruachan,

Cosa succede se si sta tentando di utilizzare COUNT () come parte di un'espressione OR booleana? ad es.AND ((stock = 1 OR quantity > 0) OR (COUNT(v.id) > 0)
nnyby,

L'ho capito .. puoi aggiungere alla clausola HAVING in questo modo:HAVING variations > 0 OR (stock = 1 OR quantity > 0)
nnyby

28

Non sono sicuro di quello che stai cercando di fare ... forse qualcosa del genere

SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC

1
MSSQL fornisce l' errore di analisi "nome colonna non valido" per num. +1 comunque per la sintassi pulita (potrebbe essere la mia configurazione, o ms ... ahh bene).
Samis,

Fornire un alias per tutte le colonne nella selezione.
Adil Khalil,

18
SELECT COUNT(*)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC;

EDIT (se vuoi solo le gids):

SELECT MIN(gid)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC

Grazie Joe, ma questo restituisce il COUNT () - Sto cercando di restituire tutti i gid che hanno un COUNT (*) più di 10

1
Non è necessario Min () lì dentro.
Ali Ersöz,

14

provare

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

14

Solo versione accademica senza clausola:

select *
from (
   select gid, count(*) as tmpcount from gd group by gid
) as tmp
where tmpcount > 10;

13

Non ci possono essere funzioni aggregate (es. COUNT, MAX, ecc.) Nella clausola A WHERE. Quindi usiamo invece la clausola HAVING. Pertanto l'intera query sarebbe simile a questa:

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;

6

- ricerca di stazioni meteorologiche con record mezz'ora mancanti

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;

- variazione di yapiskan con un dove .. in .. seleziona


1

Penso che non è possibile aggiungere count()con where. ora vedi perché ....

wherenon è la stessa cosa having, havingsignifica che stai lavorando o hai a che fare con un gruppo e con lo stesso lavoro di conteggio, ma anche con l'intero gruppo,

ora come conta funziona come tutto il gruppo

crea una tabella e inserisci alcuni ID e poi usa:

select count(*) from table_name

troverai i valori totali significa che sta indicando un gruppo! così whereviene aggiunto con count();


1

COUNT (*) può essere utilizzato solo con HAVING e deve essere utilizzato dopo l'istruzione GROUP BY. Ecco l'esempio seguente:

SELECT COUNT(*), M_Director.PID FROM Movie
INNER JOIN M_Director ON Movie.MID = M_Director.MID 
GROUP BY M_Director.PID
HAVING COUNT(*) > 10
ORDER BY COUNT(*) ASC
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.