亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從每組中選擇一列中具有相同值且在另一列中具有最大值的組中的平均值

從每組中選擇一列中具有相同值且在另一列中具有最大值的組中的平均值

PHP
胡說叔叔 2023-04-15 14:11:23
我一直在努力尋找答案,但似乎沒有人遇到與我類似的問題,所以我決定將其發布在這里。我有一個包含 200 條記錄的表,列中有重復值fix_id,在列時間戳中,每條記錄的值范圍為 1 到 5,在最后一列中我得到了年齡值。我喜歡為列中具有相同 id 的每個組選擇fix_id同時在時間戳列中保持最大值的年齡列的平均值,并且有一個棘手的問題是年齡列有時可以具有值 0,在這種情況下,我喜歡跳過這個值。 fix_id   timestamp  age  10         2        0  10         2        2  10         4        0  10         4        1  10         4        3  5          4        2  5          4        4  5          3       10所以從這張表中,我想得到這個結果 fix_id    timestamp   age  10          4         2  5           4         3因此,如果年齡列中有 0,我不想在計算平均值時包括它。這可能嗎?
查看完整描述

2 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

一種方法是帶過濾的聚合查詢:


select fix_id, timestamp, avg(age)

from t

where age > 0 and

      timestamp = (select max(t2.timestamp) from t t2 where t2.fix_id = t.fix_id)

group by fix_id;


查看完整回答
反對 回復 2023-04-15
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

如果您在查詢中設置條件,例如:


WHERE age > 0

0那么您將錯過最大時間戳僅在列中包含 sage并且您不會fix_id在結果中得到它的情況。

所以使用條件聚合:


SELECT t.fix_id, t.timestamp, 

       AVG(CASE WHEN t.age > 0 THEN t.age END) average_age

FROM tablename t

WHERE t.timestamp = (SELECT MAX(timestamp) FROM tablename WHERE fix_id = t.fix_id)

GROUP BY t.fix_id, t.timestamp

請參閱演示。

結果:


| fix_id | timestamp | average_age |

| ------ | --------- | ----------- |

| 5      | 4         | 3           |

| 10     | 4         | 2           |


查看完整回答
反對 回復 2023-04-15
  • 2 回答
  • 0 關注
  • 144 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號