MySQL - Menggunakan COUNT (*) dalam klausa WHERE


157

Saya mencoba mencapai yang berikut ini di MySQL (lihat pseudokode)

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

Apakah ada cara untuk melakukan ini tanpa menggunakan (PILIH ...) dalam klausa WHERE karena itu akan tampak seperti pemborosan sumber daya.

Jawaban:


265

coba ini;

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

37
+1 untuk memiliki Ini selalu merupakan klausa bahwa Mereka Tidak Perlu Mengajar Dengan Benar pada kursus atau buku sql dan mengetahuinya secara umum tanda bahwa pembuat kode telah berkembang melampaui tingkat pemula.
Cruachan

Bagaimana jika Anda mencoba menggunakan COUNT () sebagai bagian dari ekspresi boolean OR? misAND ((stock = 1 OR quantity > 0) OR (COUNT(v.id) > 0)
nnyby

Saya menemukan HAVING variations > 0 OR (stock = 1 OR quantity > 0)
jawabannya

28

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

1
MSSQL memberikan kesalahan parse "nama kolom tidak valid" untuk num. +1 tetap untuk sintaks bersih (bisa jadi setup saya, atau ms ... ahh well).
samis

Berikan alias untuk semua kolom di pilih.
Adil Khalil

18
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

Terima kasih Joe, tetapi itu mengembalikan COUNT () - Saya ingin mengembalikan semua gid yang memiliki COUNT (*) lebih dari 10

1
Tidak perlu Min () di sana.
Ali Ersöz

14

mencoba

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

14

Hanya versi akademis tanpa klausa:

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

13

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;

6

- Mencari stasiun cuaca dengan catatan setengah jam yang hilang

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;

- variasi yapiskan dengan tempat .. di .. pilih


1

saya pikir Anda tidak dapat menambahkan count()dengan where. sekarang lihat mengapa ....

wheretidak sama dengan having, havingberarti 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 wherejuga ditambahkan dengan count();


1

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.