MySQL - WHERE yan tümcesinde COUNT (*) kullanma


157

MySQL ( pseudokod bakınız ) aşağıdaki gerçekleştirmek için çalışıyorum

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

WHERE yan tümcesinde (SELECT ...) kullanmadan bunu yapmanın bir yolu var mı, çünkü bu bir kaynak israfı gibi görünüyor.

Yanıtlar:


265

bunu dene;

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

37
Sahip olmak için +1 Bu her zaman sql kurslarında veya kitaplarında düzgün bir şekilde öğretmek için uğraşmadıkları ve kodlayıcının acemi seviyenin ötesine ilerlediğinin işaretini bildikleri bir maddedir.
Cruachan

COUNT () yöntemini bir boole OR ifadesinin parçası olarak kullanmaya çalışıyorsanız ne olur? ör.AND ((stock = 1 OR quantity > 0) OR (COUNT(v.id) > 0)
nnyby

Bunu anladım .. HAVING yantümcesine şöyle ekleyebilirsiniz:HAVING variations > 0 OR (stock = 1 OR quantity > 0)
nnyby

28

Ne yapmaya çalıştığınızdan emin değilim ... belki böyle bir şey

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

1
MSSQL için "geçersiz sütun adı" ayrıştırma hatası veriyor num. Temiz sözdizimi için yine de +1 (kurulumum olabilir veya ms ... ahh iyi olabilir).
samis

Seçimdeki tüm sütunlar için bir takma ad sağlayın.
Adil Khalil

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

DÜZENLE (sadece kapakları istiyorsanız):

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

Teşekkürler Joe ama bu COUNT () döndürür - Ben 10'dan fazla bir COUNT (*) olan tüm gid's dönmek için arıyorum

1
Orada Min'e () gerek yok.
Ali Ersöz

14

Deneyin

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

14

Madde olmadan sadece akademik sürüm:

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

13

Bir WHERE yan tümcesinde toplama işlevleri (Örn. COUNT, MAX vb.) Olamaz. Bu nedenle bunun yerine HAVING yan tümcesini kullanıyoruz. Bu nedenle, tüm sorgu şuna benzer:

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

- yarım saatlik kayıtları olmayan hava istasyonlarını arama

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;

- yapiskan'ın bir yerle değişimi .. içinde .. seçin


1

i ekleyemezsiniz düşünüyorum count()ile where. şimdi nedenini gör ....

whereaynı grupla çalıştığınız veya uğraştığınız anlamına gelir having, havingaynı sayım çalışmasıyla, aynı zamanda tüm grupla da ilgileniyorsa,

şimdi nasıl sayılır bütün grup olarak çalışıyor

bir tablo oluşturun ve bazı kimlikler girin ve şunu kullanın:

select count(*) from table_name

toplam değerleri bulacaksınız bazı grup anlamına gelir! böylece whereekledi count();


1

COUNT (*) yalnızca HAVING ile kullanılabilir ve GROUP BY deyiminden sonra kullanılmalıdır. Lütfen aşağıdaki örneği bulun:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.