自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等,并且在引用子查询时还支持重命名所有的子查询列。
我不确定,但这个开发工作日志页面似乎表明MySQL也已经实现了更短的语法(像MariaDB那样省略"ROW"),或者他们将在不久的将来实现。