我正在寻找像
这样的东西SELECT
`foo`.*,
(SELECT MAX(`foo`.`bar`) FROM `foo`)
FROM
(SELECT * FROM `fuz`) AS `foo`;
但似乎foo
在嵌套查询中无法识别,因为存在类似
[Err] 1146 - Table 'foo' doesn't exist
我尝试上面的查询,因为我认为它比
更快SELECT
`fuz`.*,
(SELECT MAX(`bar`) FROM `fuz`) as max_bar_from_fuz
FROM `fuz`
请给我一些建议。
编辑:我正在寻找性能比第二个查询更好的解决方案。请假设我的表fuz
非常非常大,因此运行额外的查询会导致max_bar
花费很多。
答案 0 :(得分:1)
你想要的,第一个查询(有一些修改)可以工作,叫做Common Table Expressions,MySQL没有那个功能。
如果您的第二个查询效果不佳,您可以使用:
SELECT
fuz.*,
fuz_grp.max_bar
FROM
fuz
CROSS JOIN
( SELECT MAX(bar) AS max_bar
FROM fuz
) AS fuz_grp
答案 1 :(得分:0)
创建到SELECT子句中的别名只能用于访问标量值,它们是不表的同义词。如果要为所有返回的行返回列的最大值,可以通过先运行查询来计算变量的最大值,然后将此变量用作查询的标量值,如:
-- create and populate a table to demonstrate concept
CREATE TABLE fuz (bar INT, col0 VARCHAR(20), col1 VARCHAR(20) );
INSERT INTO fuz(bar, col0, col1) VALUES (1, 'A', 'Airplane');
INSERT INTO fuz(bar, col0, col1) VALUES (2, 'B', 'Boat');
INSERT INTO fuz(bar, col0, col1) VALUES (3, 'C', 'Car');
-- create the scalar variable with the value of MAX(bar)
SELECT @max_foo:=MAX(bar) FROM fuz;
-- use the scalar variable into the query
SELECT *, @max_foo AS `MAX_FOO`
FROM fuz;
-- result:
-- | BAR | COL0 | COL1 | MAX_FOO |
-- |-----|------|----------|---------|
-- | 1 | A | Airplane | 3 |
-- | 2 | B | Boat | 3 |
-- | 3 | C | Car | 3 |
答案 2 :(得分:-1)
只需简单使用MAX功能:
SELECT
`fuz`.*,
MAX(`fuz`.`bar`)
FROM
`fuz`
或者如果您使用
SELECT
`foo`.*,
MAX(`foo`.`bar`)
FROM
(SELECT * FROM `fuz` JOIN `loolse' ON (`fuz`.`field` = `loolse`.`smile`)) AS `foo`;