Jawaban:
coba ini;
select gid
from `gd`
group by gid
having count(*) > 10
order by lastupdated desc
AND ((stock = 1 OR quantity > 0) OR (COUNT(v.id) > 0)
HAVING variations > 0 OR (stock = 1 OR quantity > 0)
Saya tidak yakin tentang apa yang Anda coba lakukan ... mungkin sesuatu seperti
SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC
num
. +1 tetap untuk sintaks bersih (bisa jadi setup saya, atau ms ... ahh well).
SELECT COUNT(*)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC;
Sunting (jika Anda hanya menginginkan gids):
SELECT MIN(gid)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC
Hanya versi akademis tanpa klausa:
select *
from (
select gid, count(*) as tmpcount from gd group by gid
) as tmp
where tmpcount > 10;
Tidak boleh ada fungsi agregat (mis. COUNT, MAX, dll.) Dalam klausa WHERE. Karenanya, kami menggunakan klausa HAVING. Karenanya seluruh permintaan akan serupa dengan ini:
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;
saya pikir Anda tidak dapat menambahkan count()
dengan where
. sekarang lihat mengapa ....
where
tidak sama dengan having
, having
berarti Anda bekerja atau berhadapan dengan kelompok dan pekerjaan menghitung yang sama, itu juga berurusan dengan seluruh kelompok,
sekarang bagaimana menghitungnya berfungsi sebagai kelompok keseluruhan
buat tabel dan masukkan beberapa id lalu gunakan:
select count(*) from table_name
Anda akan menemukan nilai total berarti menunjukkan beberapa grup! demikian where
juga ditambahkan dengan count()
;
COUNT (*) hanya dapat digunakan dengan HAVING dan harus digunakan setelah pernyataan GROUP BY. Silakan temukan contoh berikut:
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