0

私は次のようなものを探しています

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`

いくつかの提案をお願いします。

編集: 2 番目のクエリよりもパフォーマンスの高いソリューションを探しています。fuz私のテーブルは非常に大きなものであり、追加のクエリを実行すると多くの費用がかかると想定してくださいmax_bar

4

3 に答える 3

1

最初のクエリ (多少の変更を加えたもの) が機能するために必要なものは、共通テーブル式と呼ばれ、MySQL にはその機能がありません。

2 番目のクエリがうまく機能しない場合は、これを使用できます。

SELECT
    fuz.*,
    fuz_grp.max_bar
FROM 
    fuz
  CROSS JOIN
    ( SELECT MAX(bar) AS max_bar
      FROM fuz
    ) AS fuz_grp
于 2012-05-25T10:45:24.670 に答える
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 |
于 2012-05-25T10:45:27.477 に答える
-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`;
于 2012-05-25T10:39:39.197 に答える