実際にSQLでこれを行う方法をほとんど忘れていました。問題は、次のようなSQL選択ステートメントがあることです。
SELECT COUNT(*) NAME FROM `SomeTable` WHERE `SomeID` = xxx GROUP BY `Field`
これは、1 つのフィールドと数値を含む多数のレコードを含むテーブルを返します。私が欲しいのは、それらのレコードの最大数の単一の値を取得することです。
それはあなたを助けるはずです。MAX()
関数を使うだけ
SELECT MAX(COUNT(*)) FROM `SomeTable` WHERE `SomeID` = xxx GROUP BY `Field`
LIMITを追加するだけです:
SELECT COUNT(`NAME`) AS `NUM` FROM `SomeTable` WHERE `SomeID` = xxx GROUP BY `Field` ORDER BY `NUM` DESC LIMIT 1
select max(name) from
(
SELECT COUNT(*) NAME FROM `SomeTable` WHERE `SomeID` = xxx GROUP BY `Field`)a
SELECT COUNT(*) NAME
FROM `SomeTable`
WHERE `SomeID` = xxx
GROUP BY `Field`
order by NAME desc
limit 1
私が欲しいのは、それらのレコードの最大数の単一の値を取得することです。
これを試して:
SELECT t1.*
FROM SomeTable t1
(
SELECT SomeID, Max(Field) MaxField
FROM SomeTable
GROUP BY SomeID
) t2 ON t1.SomeID = t2.SomeID AND t1.Field = t2.MaxField
WHERE t1.SomeID = xxx
フィルターに対して最高値の単一の結果が必要な場合は、Max を使用します。
SELECT MAX(MyField) NAME
FROM `SomeTable`
WHERE `SomeID` = xxx;
あるいは、別の列でグループ化された集計が必要な場合、構文は次のようになります。
SELECT Name, MAX(MyField) as MaxOfMyField -- Or COUNT(MyField) if you want the Count
FROM `SomeTable`
WHERE `SomeID` = xxx
GROUP By Name;
MAX 関数の構文は次のとおりです。
SELECT MAX(expression )
FROM tables
WHERE predicates;
例
SELECT MAX(salary) as "Highest salary"
FROM employees;