MySQL-WHERE句でのCOUNT(*)の使用


157

MySQLで次のことを達成しようとしています(pseudoコードを参照)

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

(SELECT ...)をWHERE句で使用せずにこれを行う方法はありますか。

回答:


264

これを試して;

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

37
持つための+1これは常に、SQLコースや本で適切に教えることを邪魔しないことの節であり、一般にそれについて知ることは、コーダーが初心者レベルを超えて進んだことの兆候です。
Cruachan

ブールOR式の一部としてCOUNT()を使用しようとしている場合はどうなりますか?例AND ((stock = 1 OR quantity > 0) OR (COUNT(v.id) > 0)
nnyby

:私はあなたのようなので、HAVING句に追加することができます..それを考え出したHAVING variations > 0 OR (stock = 1 OR quantity > 0)
nnyby

28

あなたが何をしようとしているのかよくわかりません...

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

1
MSSQLはに対して「無効な列名」の解析エラーを出しnumます。とにかくクリーンな構文のために+1(私のセットアップ、またはms ...ああ、そうでしょう)
samis 2017年

選択内のすべての列にエイリアスを提供します。
Adil Khalil 2017年

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

編集(gidsが必要な場合のみ):

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

Joeに感謝しますが、COUNT()を返します-COUNT(*)が10を超えるすべてのgidを返します

1
そこにMin()する必要はありません。
AliErsöz、2008年

14

試す

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

14

条項なしのアカデミック版:

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

13

WHERE句に集計関数(例:COUNT、MAXなど)を含めることはできません。したがって、代わりにHAVING句を使用します。したがって、クエリ全体は次のようになります。

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

-30分ごとのレコードが欠落している気象観測所を検索する

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;

-where .. in .. selectを持つyapiskanのバリエーション


1

私はあなたが追加することはできませんだと思うcount()where。なぜかわかります...

whereとは異なりますhavinghavingつまり、グループまたは同じ数の作業を扱っている、またはグループ全体を扱っているということです。

グループ全体として機能している数

テーブルを作成し、いくつかのIDを入力して使用します。

select count(*) from table_name

合計値は、グループを示していることを意味します。そうwhere追加されcount()ます;


1

COUNT(*)はHAVINGでのみ使用でき、GROUP BYステートメントの後に使用する必要があります。次の例をご覧ください。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.