从 MariaDB v10.3.3 和 MySQL v8.0.19开始,您现在可以做到这一点!
参见文档: MariaDB、MySQL
玛丽亚数据库:
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
这里使用了 a ,因为 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 也实现了更短的语法(省略“ROW”,如 MariaDB),或者他们将在不久的将来实现。