MariaDB v10.3.3 と MySQL v8.0.19 から、まさにそれができるようになりました!
ドキュメントを参照してください: MariaDB、MySQL
マリアDB:
WITH literaltable (id,count) AS (VALUES (1,7),(2,6),(3,13),(4,12),(5,9))
SELECT MAX(count) AS max,COUNT(*) AS count FROM literaltable
ここでは a を使用しました。WITH
これは、MariaDB が に適切な列名を提供していないためですVALUES ...
。列名なしでユニオンで使用できます。
SELECT 1 AS id,7 AS count UNION ALL VALUES (2,6),(3,13),(4,12),(5,9) ORDER BY count DESC
ドキュメントには言及されていないようですが、トップレベルのクエリとして使用することもできます。
VALUES (1,7),(2,6),(3,13),(4,12),(5,9) ORDER BY 2 DESC
実際の列名は、実際には値の最初の行にすぎないため、これを行うこともできます (ただし、エレガントではなく、列名の重複エラーが発生する可能性があります)。
SELECT MAX(`7`) AS max,COUNT(*) AS count FROM (VALUES (1,7),(2,6),(3,13),(4,12),(5,9)) literaltable
MySQL:
現在、テストするMySQL v8.0.19のインスタンスはありませんが、ドキュメントによると、これらのいずれかが機能するはずです:
SELECT MAX(column_1) AS max,COUNT(*) AS count FROM (VALUES ROW(1,7), ROW(2,6), ROW(3,13), ROW(4,12), ROW(5,9)) literaltable
SELECT MAX(data) AS max,COUNT(*) AS count FROM (VALUES ROW(1,7), ROW(2,6), ROW(3,13), ROW(4,12), ROW(5,9)) literaltable(id,data)
MariaDB とは異なり、MySQL は column_0、column_1、column_2 などの自動列名を提供し、参照時にサブクエリのすべての列の名前変更もサポートします。
確かではありませんが、この開発作業ログ ページは、MySQL が短い構文 (MariaDB のように "ROW" を省略) を実装したか、近い将来実装することを示唆しているようです。