私は輸送データの行を見ていて、同じモードの輸送として 'Uber Pool'と 'UberPool'のエントリのデータを操作できるようにしたい。2つの異なるスペルを1つにグループ化する方法
私の関数が2つの異なるスペルのすべてのテーブルエントリを出力テーブルの1つの行に集めるようにするにはどうすればよいですか?
私は輸送データの行を見ていて、同じモードの輸送として 'Uber Pool'と 'UberPool'のエントリのデータを操作できるようにしたい。2つの異なるスペルを1つにグループ化する方法
私の関数が2つの異なるスペルのすべてのテーブルエントリを出力テーブルの1つの行に集めるようにするにはどうすればよいですか?
@jpwが言ったように、それはあなたのデータに依存するが、それのルックスで、あなたのGROUP BY
句でCASE EXPRESSION
を使用してそれを行うことができます:あなたは、あなたのRDBMSにタグを付けていなかった
SELECT CASE t.name = 'Uber Pool' then 'UberPool' else t.name end as name,count(*)
FROM YourTable t
GROUP BY CASE t.name = 'Uber Pool' then 'UberPool' else t.name end
が、一部ではそれらのうち、グループ内の選択項目から列エイリアスを指定して、よりよく見えるようにすることができます。
SELECT CASE t.name = 'Uber Pool' then 'UberPool' else t.name end as new_name,count(*)
FROM YourTable t
GROUP BY new_name
これはコメントには長すぎます。
あなたはこのような何かをすることによって、スペースを削除し、文字列の大文字と小文字を標準化することができます。
はselect min(t.name) as name, . . .
from t
group by lower(replace(t.name, ' ', ''))
これは、最初の列と一致する名前の一つ取り出します。 case
の束を列挙するよりも、これを使うほうが簡単です。
複雑で、言語に固有の問題があります。 upper/lower/soundexなどを試してみてください。 – jarlh
異なるスペルがあらかじめわかっている場合は、異なる値を同じものとして扱うケースエクスプレッションを使用するか、異なる値が多い場合はマッピングテーブルを設定します。動的にする必要がある場合、問題はもっと難しくなります。 – jpw
2つのエントリが等しいとみなされるルールを定義します。 'UberPool' = 'uBERpOOL'ですか? 'Uber Pool' = 'U-b-e-r * P-o-o-l'ですか? 'UberPool' = 'OoberPool'ですか? –