Можно ли получить среднее целочисленное значение из строковых данных из базы данных? - PullRequest
0 голосов
/ 29 января 2019

Я написал колбу, которая измеряет рост пользователя, цвет глаз и адрес электронной почты и сохраняет данные в базе данных postgresql, а затем отправляет пользователю по электронной почте данные, которые они мне предоставили.Я хотел бы настроить его так, чтобы пользователь получал электронное письмо со средним числом людей с их ростом и цветом глаз.

В настоящее время я установил высоту как целочисленное значение, а цвет глаз - как строковое значение.

При проверке этого я получил это сообщение об ошибке:

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) функция avg (изменение символов) не существует. LINE 1: SELECT avg (data.color_) AS avg_1 ^ СОВЕТ: ни одна функция не соответствует заданному имени и типу аргумента.Возможно, вам придется добавить явные приведения типов.[SQL: 'SELECT avg (data.color_) AS avg_1 \ nFROM data'] (Справочная информация об этой ошибке: http://sqlalche.me/e/f405)

Я полагаю, это из-за того, что я пытался получить данные 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")

1 Ответ

0 голосов
/ 30 января 2019

Вот пример, который вы можете использовать:

Рассмотрим user_data таблицу с двумя столбцами name и eye_color

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

Этот запрос даст вам количество и процент отпользователи, имеющие каждый цветной глаз.См. эту скрипку , чтобы поиграть.Вам нужно найти способ удовлетворить этот запрос в вашем приложении Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...