来自三个不同表的最大值
maximum value from three different tables
我有三个表,它们是:
- 表 1(ID、JName、XVal、YVal)
- 表 2(ID、RName、XVAl、YVal)
- table3(ID, TName, XValue, YValue)
XValue, YValue , XVal, YVal 为数字类型。我想要所有这些表中 XVal 和 YVal 的最大值和最小值。以前我写了以下查询:
Select max(XVal) FROM table1
Select max(XVal) FROM table2
Select max(XValue) FROM table3
最小值:
Select min(XVal) FROM table1
Select min(XVal) FROM table2
Select min(XValue) FROM table3
通过 运行 这些查询,我可以获得最小值和最大值的 3 个不同结果,然后,我可以使用逻辑代码在它们之间进行比较并获得最大值和最小值,但我想要的是将为我执行此操作的单个查询。
我使用了以下查询:
Select max(XVal) from table1 UNION select max(XVal) from table2 UNION select max(XValue) as XVal from table3 ORDER BY 'MAX(XVal)'DESC LIMIT 1
还有一个:
select max(XVal) as maxval from(select XVal from table1 UNION ALL SELECT XVal from table2 UNION ALL Select XValue from table3) as subquery
但是他们都失败了。有人可以帮我吗?并指出上述查询不起作用的原因?
两个版本中第一个版本的正确语法是:
Select max(XVal) as max_XVal from table1 UNION ALL
select max(XVal) from table2 UNION ALL
select max(XValue) as XVal from table3
ORDER BY max_XVal DESC
LIMIT 1;
您可以在此处使用 UNION
或 UNION ALL
。
如果您想要三个表中的最小值和最大值:
SELECT MIN(XVal), MAX(XVal)
FROM
(
SELECT XVal FROM table1
UNION ALL
SELECT XVal FROM table2
UNION ALL
SELECT XVal FROM table3
) t123;
上面的 UNION
解决方案更好,但值得注意的是,您也可以像这样使用原始查询:
SELECT
GREATEST
(
(SELECT MAX(XVal) FROM table1),
(SELECT MAX(XVal) FROM table2),
(SELECT MAX(XValue) FROM table3)
)
LEAST
(
(SELECT MIN(XVal) FROM table1),
(SELECT MIN(XVal) FROM table2),
(SELECT MIN(XValue) FROM table3)
)
在子查询上使用最大值:
select max(val) from (
select max(XVal) val from table1
UNION ALL
select max(XVal) from table2
UNION ALL
select max(XValue) from table3
) x
据我所知,此语法适用于所有 rbdms。
我有三个表,它们是:
- 表 1(ID、JName、XVal、YVal)
- 表 2(ID、RName、XVAl、YVal)
- table3(ID, TName, XValue, YValue)
XValue, YValue , XVal, YVal 为数字类型。我想要所有这些表中 XVal 和 YVal 的最大值和最小值。以前我写了以下查询:
Select max(XVal) FROM table1
Select max(XVal) FROM table2
Select max(XValue) FROM table3
最小值:
Select min(XVal) FROM table1
Select min(XVal) FROM table2
Select min(XValue) FROM table3
通过 运行 这些查询,我可以获得最小值和最大值的 3 个不同结果,然后,我可以使用逻辑代码在它们之间进行比较并获得最大值和最小值,但我想要的是将为我执行此操作的单个查询。
我使用了以下查询:
Select max(XVal) from table1 UNION select max(XVal) from table2 UNION select max(XValue) as XVal from table3 ORDER BY 'MAX(XVal)'DESC LIMIT 1
还有一个:
select max(XVal) as maxval from(select XVal from table1 UNION ALL SELECT XVal from table2 UNION ALL Select XValue from table3) as subquery
但是他们都失败了。有人可以帮我吗?并指出上述查询不起作用的原因?
两个版本中第一个版本的正确语法是:
Select max(XVal) as max_XVal from table1 UNION ALL
select max(XVal) from table2 UNION ALL
select max(XValue) as XVal from table3
ORDER BY max_XVal DESC
LIMIT 1;
您可以在此处使用 UNION
或 UNION ALL
。
如果您想要三个表中的最小值和最大值:
SELECT MIN(XVal), MAX(XVal)
FROM
(
SELECT XVal FROM table1
UNION ALL
SELECT XVal FROM table2
UNION ALL
SELECT XVal FROM table3
) t123;
上面的 UNION
解决方案更好,但值得注意的是,您也可以像这样使用原始查询:
SELECT
GREATEST
(
(SELECT MAX(XVal) FROM table1),
(SELECT MAX(XVal) FROM table2),
(SELECT MAX(XValue) FROM table3)
)
LEAST
(
(SELECT MIN(XVal) FROM table1),
(SELECT MIN(XVal) FROM table2),
(SELECT MIN(XValue) FROM table3)
)
在子查询上使用最大值:
select max(val) from (
select max(XVal) val from table1
UNION ALL
select max(XVal) from table2
UNION ALL
select max(XValue) from table3
) x
据我所知,此语法适用于所有 rbdms。