我是 SQL 新手,我正在嘗試過濾掉調查收集(無效回應)沒有變化的回應以進行多線性回歸。請注意,此表實際上有 100 多條記錄,我已將其簡化以進行說明。
資料庫:MySQL 8.0.30:TLSv1.2 (TablePlus)
- ID 是受訪者編號。
- 變數——x1、x2、x3 是自變數。
- 價值觀 - 調查回應。
例如,這是我擁有的當前表:
| ID | 變數 | 價值觀 |
|---|---|---|
| 1 | x1 | 1 |
| 1 | x2 | 1 |
| 1 | x3 | 1 |
| 2 | x1 | 2 |
| 2 | x2 | 3 |
| 2 | x3 | 4 |
| 3 | x1 | 5 |
| 3 | x2 | 5 |
| 3 | x3 | 5 |
使用的腳本: SELECT ID、Variables、Values FROM TableA GROUP BY ID
我正在嘗試實作下表,我只想保留回應中存在變化的記錄:
| ID | 變數 | 價值觀 |
|---|---|---|
| 2 | x1 | 2 |
| 2 | x2 | 3 |
| 2 | x3 | 4 |
我曾嘗試使用函式 WHERE、DISTINCT、WHERE NOT、HAVING,但似乎無法獲得所需的結果,或者大多數時候顯示空白(如下表所示)。如果有人能夠提供幫助,那將是最有幫助的。
| ID | 變數 | 價值觀 |
|---|
非常感謝!
uj5u.com熱心網友回復:
您的問題有兩個部分,因此您需要為此使用子查詢。
- 您想知道哪些回應有變化。為此,您需要按的回應分組
id,然后檢查具有相同的回應是否id都具有相同的value。為此,您只能選擇具有多個不同值的那些:
select `id`
from results
group by `id`
having count(distinct `values`) > 1
- 基于此,您可以用 a 包裝它
select以獲取您想要的所有欄位,未分組:
select *
from results
where `id` in (
select `id`
from results
group by `id`
having count(distinct `values`) > 1
)
這是 MySQL 語法,但主資料庫不應該有那么多差異
SQL 小提琴:http ://sqlfiddle.com/#!9/a266f806/4/0
希望有幫助
uj5u.com熱心網友回復:
嘗試以下操作:
WITH ids_with_variations as
(
SELECT ID
,COUNT(DISTINCT [Values]) as unique_value_count
FROM TableA
GROUP BY ID
HAVING COUNT(DISTINCT [Values]) = 3 -- this assumes that you expect each ID to have exactly three responses
)
SELECT *
FROM TableA
WHERE ID IN (SELECT ID FROM ids_with_variations)
這是 TSQL 方言。這還假設您期望value列中恰好有三個變體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/520431.html
標籤:sql变量筛选
