0

エンジニアがいて、総合スコアが 16 以上のすべてのレコードを取得しようとしています。

value_money、quality_service、friendliness、response_time はすべて同じテーブル内のフィールドです。

これらすべてを追加して WHERE を実行しようとしています。

これは私がこれまでに得たものです

SELECT *,
value_money+quality_service+friendliness+response_time AS overall
FROM feedback
WHERE engineer LIKE '%Chris Gauden%'
AND
overall < 16
ORDER BY date DESC
LIMIT 0, 15

そして、これは私が得ているエラーです。

#1054 - Unknown column 'overall' in 'where clause'
4

6 に答える 6

1

最も簡単な解決策は、条件をhaving句に移動することです。

SELECT *, value_money+quality_service+friendliness+response_time AS overall
FROM feedback
WHERE engineer LIKE '%Chris Gauden%'
HAVING overall < 16
ORDER BY date DESC
LIMIT 0, 15;

これは MySQL 拡張機能であり、他のデータベースでは機能しません。

于 2013-09-19T15:55:59.887 に答える
0

使用しているデータベースはわかりませんが、次のようにしてみてください。

SELECT *,
value_money+quality_service+friendliness+response_time AS overall
FROM feedback
WHERE engineer LIKE '%Chris Gauden%'
AND
SUM(value_money+quality_service+friendliness+response_time) < 16
ORDER BY date DESC
LIMIT 0, 15
于 2013-09-19T15:43:23.277 に答える
0

whereオーバーオールはそのテーブルの列ではないため、句で参照することはできません。

代わりに次のようなことができます。

SELECT * FROM 
(
    SELECT *,
           value_money+quality_service+friendliness+response_time AS overall
    FROM feedback
    WHERE engineer LIKE '%Chris Gauden%'
) AS ComputedTable
WHERE
    overall < 16
ORDER BY date DESC
LIMIT 0, 15
于 2013-09-19T15:43:40.130 に答える
0

サーバーがそれをサポートしていない可能性があります。その場合、2 つのオプションを考えることができます。サブクエリ:

SELECT * FROM (
SELECT *, value_money+quality_service+friendliness+response_time AS overall
FROM feedback
WHERE engineer LIKE '%Chris Gauden%') AS t
WHERE overall < 16
ORDER BY date DESC
LIMIT 0, 15

または方程式を繰り返します:

SELECT *,
value_money+quality_service+friendliness+response_time AS overall
FROM feedback
WHERE engineer LIKE '%Chris Gauden%'
AND
value_money+quality_service+friendliness+response_time < 16
ORDER BY date DESC
LIMIT 0, 15
于 2013-09-19T15:45:17.407 に答える