2012-02-01 11 views
3

次の問題があります。想像して、私のMySQLのテーブルは次のようになります。SUBSTRING()のMIN()値を見つける

id range 
1 210-400 
2 300-310 
3 100-350 

は私が

  1. (前に「 - 」)最初の部分のMIN値を見つけたい
  2. のMAX値の範囲フィールドで(「 - 」の後に)第二部範囲フィールド

では、今、私はSUBSTRINGと、そのフィールドの必要な部品を選択し、次のようにMINまたはMAX値を取得しようとしました:

SELECT 
    SUBSTRING_INDEX(`range`,'-',1) as `left_value`, 
    SUBSTRING_INDEX(`range`,'-',-1) as `right_value`, 
    MIN(`left_value`), 
    MAX(`right_value`) 
FROM `table` 

しかし、私はちょうど得る "#1054 - 'フィールドリスト' 内の不明な列 'left_value'" - これは、ことも可能であるとどのよう

だから私の質問は?

+6

そして、このような何かに調整し、クラス、なぜ保存され、説明したように1つのフィールド内の複数の値は悪い考えです。 – cHao

答えて

3

3行目の後にコンマがありません(as 'right_value'以降)。

しかし、これはおそらくまだあなたの問題を完全に解決するわけではありません。 +1のDevartの答え。 MINにし、MAX関数で、または別名は現在のSELECTでアクセスすることはできませんので、サブクエリを使用する -

SELECT 
    MIN(SUBSTRING_INDEX(`range`, '-', 1)), 
    MAX(SUBSTRING_INDEX(`range`, '-', -1)) 
FROM `table` 
3

使用SUBSTRING_INDEX回:拡張するには、おそらくこれに近い何かを探しています。

1

Devartは、あなたが「エイリアス」カラム名を使用することはできませんが、MySQLで、あなたはSQL変数を使用することができます...多分

SELECT 
     @leftValue := SUBSTRING_INDEX(`range`,'-',1) as ignore1, 
     @rightValue := SUBSTRING_INDEX(`range`,'-',-1) as ignore2, 
     MIN(@leftValue) as LowRange, 
     MAX(@rightValue) as HighRange 
    FROM 
     `table`, 
     (select @leftValue := '', @rightValue := '') SqlVars 
関連する問題