2

Stack Overflow (および一般的なコーディング) の初心者。

いくつかの調査を行いましたが、次の問題に対する答えを見つけることができませんでした。

ディメンション自体ではなく、ディメンションに適用された関数の結果で 2 つのテーブルを結合するにはどうすればよいですか?

つまり、大文字と小文字のあいまいなディメンションをそのまま結合するのではなく、lower() 関数の小文字の結果で次の 2 つのテーブルを結合したいと考えています。

SELECT
lower(first_name) as firstname
,lower(last_name) as lastname
,lower(email) as email1
,total_donated
From BensData.Donations As a

JOIN EACH

(Select
lower(first_name) as first
,lower(last_name) as last
,lower(email) as email2
,sum(amount) as total_donated
From BensData.Donations 
GROUP BY email2, first, last) As b

ON a.email1=b.email2 AND a.firstname=b.first AND a.lastname=b.last

最初のテーブル (a) で作成したエイリアスで結合することはできませんが、テーブル a (first_name と last_name) の元のディメンションで結合すると、結果はケースのあいまいなディメンションに基づいており、望ましくない結果。

それが明確だったことを願っています。

助けてくれてありがとう!

4

3 に答える 3

3

次のような 2 つのサブクエリを使用してみてください。

SELECT
a.firstname
,a.lastname
,a.email1
,a.total_donated
FROM

(SELECT
lower(first_name) as firstname
,lower(last_name) as lastname
,lower(email) as email1
,total_donated
From BensData.Donations) As a

JOIN EACH

(Select
lower(first_name) as first
,lower(last_name) as last
,lower(email) as email2
,sum(amount) as total_donated
From BensData.Donations 
GROUP BY email2, first, last) As b

ON a.email1=b.email2 AND a.firstname=b.first AND a.lastname=b.last

元のクエリでは、 a は BensData.Donations の単なるエイリアスであるため、そのテーブルに存在するフィールドでのみ結合できます。

于 2014-12-18T19:35:21.257 に答える
0

みんなの助けに感謝します!

特に私を正しい方向に向けてくれたスプロケット!彼のコードと私のコードの主な違いは、最初の SELECT 句の各次元の前に追加されたテーブル エイリアスがないことです (例: **a.**fistname、**a.**lastname、--- --> 名、姓)

何らかの理由で、テーブル エイリアスが原因で BigQuery からエラーが発生し続けました。

これが機能したコードです。

SELECT
firstname
,lastname
,email1
,total_donated
FROM

(SELECT
lower(first_name) as firstname
,lower(last_name) as lastname
,lower(email) as email1
From BensData.Donations) As a

JOIN EACH

(Select
lower(first_name) as first
,lower(last_name) as last
,lower(email) as email2
,sum(float(amount)) as total_donated
From BensData.Donations 
GROUP BY email2, first, last) As b

ON a.email1=b.email2 AND a.firstname=b.first AND a.lastname=b.last

助けてくれてありがとう!

于 2015-01-06T03:38:33.620 に答える
0

私は聞いたjoin eachことがなく、MySQL 結合の構文として文書化されていません (こちらを参照)。

このfrom句を試してください:

From BensData.Donations a JOIN
     (Select lower(first_name) as first, lower(last_name) as last,
             sum(amount) as total_donated
      From BensData.Donations 
      GROUP BY first, last
     ) b
     ON a.firstname = b.first AND a.lastname = b.last

あなたのバージョンでは、列間のサブクエリにもカンマがありませんでした。

明確にするために、おそらくfrom句を次のように書く必要があります。

     ON lower(a.firstname) = b.first AND lower(a.lastname) = b.last

lower()または、サブクエリから を削除します。onそれ以外の場合、句が実際に行うことは、サーバー、データベース、およびテーブルのデフォルトの照合に依存します。

于 2014-12-18T02:53:17.407 に答える