【问题标题】:What is the equivalent of the following sql statement in postgresql?postgresql中以下sql语句的等价物是什么?
【发布时间】:2021-11-17 21:18:18
【问题描述】:

我在MySql 数据库中执行了以下 SQL 语句,它成功运行

cursor.execute("""SELECT COUNT(*), `deleted` FROM `tweets` WHERE `id` = %s""", (tweet['id'],))

postgres database 中的等价物是什么? 尝试以下

cursor.execute("""SELECT COUNT(*), deleted FROM tweets WHERE id = %s""", (tweet['id'],))

因错误而失败

 ERROR: ERROR:  column "tweets.deleted" must appear in the GROUP BY clause or be used in an aggregate function

我不确定应该在哪里添加GROUP BY 子句。 任何帮助将不胜感激。

【问题讨论】:

    标签: mysql sql postgresql psycopg2


    【解决方案1】:

    此声明:

    SELECT COUNT(*), `deleted`
    FROM `tweets`
    WHERE `id` = %s
    

    在包括 MySQL 在内的任何数据库中都存在格式错误,因为 SELECT 列混合了聚合函数和非聚合函数,并且没有 GROUP BY

    旧版本的 MySQL 接受这种语法(很高兴已经修复了一个疏忽!)。 deleted 的值来自 任意 行。因此,您可以使用deleted 的任何值来匹配功能。所以,使用聚合函数:

    SELECT COUNT(*), MAX(deleted) as deleted
    FROM `tweets`
    WHERE `id` = %s
    

    【讨论】:

    • 是的。 mysql 数据库是一个旧数据库,它解释了它为什么工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2020-08-04
    • 2011-01-13
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多