「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ネストされた SELECT を使用せずに MySQL でカウントに基づいてデータをフィルタリングする方法は?

ネストされた SELECT を使用せずに MySQL でカウントに基づいてデータをフィルタリングする方法は?

2024 年 11 月 14 日公開
ブラウズ:310

How to Filter Data Based on Count in MySQL Without Using Nested SELECT?

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

ユーザーが、WHERE 句で COUNT(*) 関数を使用して MySQL のデータをフィルタリングしようとしたときに問題が発生しました。 WHERE句。彼らは、大量のリソースを消費する可能性があるため、ネストされた SELECT ステートメントを使用せずにこのタスクを達成する効率的な方法を探していました。

ユーザーは、望ましい結果を示すために次の疑似コードを提示しました:

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

このアプローチの問題は、MySQL が WHERE 句で COUNT(*) などの集計関数をサポートしていないことです。この制限を回避するために、ユーザーは、ネストされた SELECT を使用して、一意の GID ごとに行数をカウントし、それに応じて結果をフィルター処理する可能性を検討しました。ただし、この方法は非効率的でリソースを大量に消費すると考えられていました。

幸いなことに、MySQL では、GROUP BY 句と HAVING 句を使用して、より最適化されたソリューションが提供されています。

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

このクエリは次の手順を実行します。

  1. gd 列ごとに gd テーブル内の行をグループ化します。
  2. の行数を計算します。 COUNT(*) 関数を使用して各 GID グループを並べ替えます。
  3. HAVING 句を使用して結果をフィルタリングし、カウントが 10 より大きいグループのみを返します。
  4. 最終結果を降順に並べ替えますlastupdated 列に基づいています。

GROUP BY 句と HAVING 句を活用することにより、このアプローチは、ネストされた SELECT ステートメントに頼ることなく、効果的に望ましい結果を達成し、パフォーマンスと効率が向上します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3