一個例子結構將有助於更好地瞭解您所要完成的任務。但我想我會得到你想要做的。
您必須使用聚合函數才能使用group by。 類似於SUM或AVG。
但是你首先需要建立自己的數據的一個支點,然後你可以使用該支點來檢查您的標準:
這將創建一個表支點,顯示每個審覈規定符合什麼紀錄:
SELECT
user_name,
case when characteristic = "online" then 1 else 0 end as online_yn,
case when characteristic = "instore" then 1 else 0 end as instore_yn,
case when characteristic = "account" then 1 else 0 end as account_yn,
case when characteristic = "email" then 1 else 0 end as email_yn,
FROM my_table
現在您可能想要做的是創建這些條目的平均版本,這些條目按user_name
分組,然後使用這些平均值創建您想要的字段。爲此,您需要使用先前創建的同樣的語句作爲內聯表格:
Select
user_name,
case when avg(online_yn + instore_yn) >= 1 then 1 else 0 end as purchase_yn,
case when avg(online_yn + instore_yn) >= 1 and avg(email_yn + account_yn) >= 1 then 1 else 0 end as purchaser_with_account
From
(SELECT
user_name,
case when characteristic = "online" then 1 else 0 end as online_yn,
case when characteristic = "instore" then 1 else 0 end as instore_yn,
case when characteristic = "account" then 1 else 0 end as account_yn,
case when characteristic = "email" then 1 else 0 end as email_yn,
FROM my_table) avg_table
group by
user_name;
這應該有所幫助。
它在性能方面效率可能不高,但你會得到你想要的。
這是無效的標準SQL。你正在使用哪個DBMS? –
@a_horse_with_no_name,我假設你的意思是使用雙引號? (並將它們與單引號混合)。我沒有做太多的工作,因爲他也說代碼不起作用......只是看起來它必須有兩種失敗的方式。仍然會很高興知道DBMS。 –
@runningbirds,做下面的任何答案滿足您的需求?如果是這樣,你應該將其標記爲「已接受」。如果沒有,請回來,讓我們知道如何解決其餘的問題(並回答你使用的是什麼DBMS的問題:例如SQL-Server,MySQL,Oracle,MS-Access,其他東西。 –