web-dev-qa-db-ja.com

MySQL-WHERE句でCOUNT(*)を使用する

私はMySQLで以下を達成しようとしています(pseudoコードを参照)

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

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

144
Ice

これを試して;

select gid
from `Gd`
group by gid 
having count(*) > 10
order by lastupdated desc
247
Ali Ersöz

あなたが何をしようとしているのかわからない...多分何か

SELECT gid, COUNT(*) AS num FROM Gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC
25
Greg
SELECT COUNT(*)
FROM `Gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC;

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

SELECT MIN(gid)
FROM `Gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC
15
Winston Smith

試してみる

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

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

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

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;
8
pushkarr

-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

6
zzapper

wherecount()を追加できないと思います。今なぜ...を参照してください.

wherehavingと同じではありません。havingは、作業中またはグループを処理しており、同じcountの作業を意味します。また、グループ全体を処理しています。

今、それがグループ全体としてどのように働いているかを数えてください

テーブルを作成し、IDを入力してから使用します:

select count(*) from table_name

合計値は、グループを示していることを意味します! wherecount()で追加されます。

1
Tushar Pandey