あなたのクエリ (outermost をエイリアスするcount(*) as num
と、2 つのサブクエリから "total" としてエイリアス化された式が等しいかどうかに応じて、1 または 2 のいずれかが返されます。
UNION を使用して、clips
この結果を返すためにテーブルを 2 回スキャンする必要はありません。1 回のスキャンで十分です。このクエリは、クリップ テーブルを 1 回スキャンして同等の結果を返します。
SELECT CASE WHEN c.total_1 = c.total_2 THEN 1 ELSE 2 END AS num
FROM
(
SELECT SUM(CASE WHEN ((dimensions like('%concert%') AND dimensions NOT like('concert'))
OR (file_format like('%concert%') AND file_format NOT like('concert')))
THEN 1 ELSE 0 END
) AS total_1
, SUM(CASE WHEN (dimensions like('concert') OR file_format like('concert'))
THEN 1 ELSE 0 END
) AS total_2
FROM clips
) c
これは、クエリよりも効率的に実行される可能性があります。
そうは言っても、これが本当に求めている結果セットであることはまったく明らかではありません。
補遺: 訂正。このクエリは完全に同等ではありません。このクエリは、クリップ テーブルが空の場合 (行が含まれていない場合) に異なる結果を返します。これは修正される可能性がありますが、これが実際に Mark が求めている結果セットであるとは思えません。
クリップ テーブルが空の状態を処理するには:
SELECT CASE WHEN IFNULL(c.total_1,0) = IFNULL(c.total_2,0) THEN 1 ELSE 2 END AS num
FROM (SELECT 1) i LEFT JOIN
(
SELECT SUM(CASE WHEN ((dimensions like('%concert%') AND dimensions NOT like('concert'))
OR (file_format like('%concert%') AND file_format NOT like('concert')))
THEN 1 ELSE 0 END
) AS total_1
, SUM(CASE WHEN (dimensions like('concert') OR file_format like('concert'))
THEN 1 ELSE 0 END
) AS total_2
FROM clips
) c