从 MariaDB v10.3.3 和 MySQL v8.0.19 开始,您现在可以完全做到这一点!
请参阅文档:MariaDB、MySQL
MariaDB:
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
我在这里使用了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 等,并且还支持在引用子查询时重命名子查询的所有列。
我不确定,但this dev worklog page 似乎暗示 MySQL 也实现了更短的语法(省略“ROW”,如 MariaDB),或者他们将在不久的将来实现。