2

日時行の最大数を見つけようとしています。

つまり、DATETIME 情報の列に最も頻繁に発生する月の名前を表示しようとしています。

ここに私のコードがあります:

Select MONTHNAME(a.AF_Zeit) as Monat
From abflug a
group by MONTH(a.AF_Zeit)
having count(AF_Zeit) = (select max(count(MONTH(AF_Zeit)))
                from abflug
                group by MONTH(AF_Zeit))

mySQL は次のメッセージを返します:「#1111 - グループ関数の無効な使用」

理解できません!これを取得する他の可能性があると聞きましたが、サブセレクトでそれを行う必要があります。どんな助けにもとても感謝しています。

4

1 に答える 1

1

ABFLUG テーブルの AF_ZEIT 列に最も頻繁に発生する月の名前を表示しようとしていると思います。

これどうやってやるの?概念的に考えてみましょう。

まず、ABFLUG テーブルの各行の月名を示す仮想テーブル (サブセレクト) が必要です。

SELECT MONTHNAME(a.AF_Zeit) as Monat
  FROM ABFLUG A

次に、これらのアイテムをカウントする必要があります (または、月ごとのヒストグラムを取得することもできます)。これはそれを行います。これは、より小さな仮想テーブルです。

SELECT COUNT(*) NNN, MONTHNAME(a.AF_Zeit) as Monat
  FROM ABFLUG A
 GROUP BY MONTHNAME(a.AF_Zeit) 

次に、そのテーブルの行を操作して降順の頻度で並べ替え、最初の (最も頻度の高い) 行を表示する必要があります。

SELECT Z.Monat FROM (
  SELECT COUNT(*) NNN, MONTHNAME(a.AF_Zeit) as Monat
    FROM ABFLUG A
   GROUP BY MONTHNAME(a.AF_Zeit) 
  )Z
  ORDER BY Z.NNN
  LIMIT 1

これの難しい部分は、仮想テーブルの用語で何をしようとしているのかについて概念を明確にすることであることに注意してください。

于 2012-06-10T23:37:17.583 に答える