0

MySQL ステートメントの WHERE 部分で数学計算を行うことはできますか?

たとえば、次の SQL ステートメントがあるとします。

SELECT
   employee_id,
   max_hours,
   sum(hours) AS total_hours
FROM
   some_table
WHERE
   total_hours < (max_hours * 1.5)

いろいろ調べたところ、MySQL には数学関数があることがわかりましたが、すべての例はステートメントの SELECT 部分にあります。

4

2 に答える 2

2

最終結果がブール値 (true、false、または NULL (null は false として扱われる)) である限り、任意の (サポートされている) 演算を where または join 句で使用できます。

これは通常、構造上、直接の等値、不等値、または範囲検索にしか使用できないため、インデックスを使用できないことを意味します。あなたが与えた例では、定義できる有用なインデックスがないため、クエリランナーはテーブルスキャンを強制的に実行する必要があります. 1 つのテーブルを参照する単純なフィルタリング句の場合、片側が定数 (またはクエリの実行時に定数である変数) である場合にのみ、インデックスが使用されます。

結合句では、一致の一方の側が直接の列参照である場合 (つまり、算術演算がない場合) にインデックスが使用される場合がありますが、結合が多くの行をカバーする可能性がある場合は、インデックスのようにスキャンを使用することもできます (またはtable) スキャンは、非常に多くのインデックス シークよりも高速です。

于 2013-06-08T01:45:58.760 に答える
1

あなたはこのようなことを試すかもしれません...

SELECT
   employee_id,
   max_hours,
   SUM(hours)
FROM
   some_table
GROUP BY
   employee_id
HAVING
   SUM(hours) < (max_hours * 1.5)
于 2013-06-08T01:38:21.743 に答える