簡體   English   中英

是否可以從數據庫的字符串數據中獲取平均整數值?

[英]Is it possible to get an average integer value from string data from a database?

我編寫了一個flask應用程序,該應用程序需要用戶身高,眼睛顏色和電子郵件地址,並將數據保存到PostgreSQL數據庫中,然后通過電子郵件向用戶發送他們給我的數據。 我想進行設置,以便用戶收到一封電子郵件,其中包含他們的身高和眼睛顏色的平均人數。

目前,我已將height設置為Integer值,並將眼睛顏色設置為字符串值。

測試此錯誤消息:

sqlalchemy.exc.ProgrammingError:(psycopg2.ProgrammingError)函數avg(字符變化)不存在第1行:SELECT avg(data.color_)AS avg_1 ^提示:沒有函數與給定的名稱和參數類型匹配。 您可能需要添加顯式類型轉換。 [SQL:'SELECT avg(data.color_)AS avg_1 \\ nFROM數據'](此錯誤的背景位於: http ://sqlalche.me/e/f405)

我相信這是由於我試圖從str獲取int數據。 有沒有辦法做到這一點? 假設有4個人填寫了此表單,而所有4個人都說他們有“藍眼睛”。 有沒有辦法讓程序將100%的平均值發送給他們?

我的代碼如下:

class Data(db.Model):
    __tablename__="data"
    id=db.Column(db.Integer,primary_key=True)
    email_=db.Column(db.String(120), unique=True)
    height_=db.Column(db.Integer)
    color_=db.Column(db.String(6))

@app.route("/success", methods=['POST'])
def success():
    if request.method=='POST':
        email=request.form["email_name"]
        height=request.form["height_name"]
        color=request.form["color_name"]
        send_email(email, height, color)
        if db.session.query(Data).filter(Data.email_==email).count() == 0:
            data=Data(email,height,color)
            db.session.add(data)
            db.session.commit()
            average_height = db.session.query(func.avg(Data.height_)).scalar()
            average_color = db.session.query(func.avg(Data.color_)).scalar()
            print(average_height)
            print(average_color)
            return render_template("success.html")

您可以參考以下示例:

考慮具有兩列nameeye_color user_data

SELECT eye_color, count(*) AS user_count,
       COUNT(*) * 100.0/ SUM(COUNT(*)) OVER() as percent
FROM user_data
GROUP BY eye_color;

此查詢將給您計數和擁有每只彩色眼睛的用戶的百分比。 請參閱此小提琴來玩耍。 您需要找到一種在Python應用程序中適合此查詢的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM