python - SQL查询在MariaDB控制台中有效,但在python pymysql中无效

标签 python mysql mariadb pymysql

我的 SQL 查询可以在 MariaDB CLI 中运行,但不能在 python pymysql 中运行。

我的要求:

我想获取具有相同用户名的记录数(COUNT(*)),然后获取每个用户的排名(rowNo),如果有两个用户名具有相同的记录 (COUNT(*)),排名(rowNo) 也将相同 (@rowNo:=@rowNo)。

问题:

下面的 SQL 在 MariaDB CLI 中工作,相同数量的记录具有相同的排名(rowNo)。但在python pymysql中,相同数量的reocord具有不同的rank(rowNO),它会增加(@rowNo:=@rowNo+1)。为什么?

        art_sql = "SELECT T2.rowNo, T2.username, T2.art_number                        \
               FROM                                                               \
               (SELECT T1.art_number,                                             \
                       T1.username,                                               \
                       IF(@c=T1.art_number,@rowNo:=@rowNo,@rowNo:=@rowNo+1) AS rowNo, \
                       @c:=T1.art_number                                          \
               FROM                                                               \
                 (                                                                \
                   SELECT username,COUNT(*) AS art_number                         \
                   FROM %s                                                        \
                   GROUP BY username                                              \
                   ORDER BY art_number DESC                                       \
                 )T1                                                              \
               )T2, (SELECT @rowNo:=0,@c:=0)T3                                    \
               WHERE T2.username='%s';"                                           \
               % (self.__article_table, username)

顺便说一句,我下面有一个类似的 SQL 没有这个问题:

        rev_sql = "SELECT T2.rowNo, T2.username, T2.total_revenue                     \
               FROM                                                               \
               (SELECT T1.total_revenue,                                          \
                       T1.username,                                               \
                       IF(@c=T1.total_revenue,@rowNo:=@rowNo,@rowNo:=@rowNo+1) AS rowNo, \
                       @c:=T1.total_revenue                                       \
               FROM                                                               \
                 (                                                                \
                   SELECT username,SUM(money) AS total_revenue                    \
                   FROM %s                                                        \
                   GROUP BY username                                              \
                   ORDER BY total_revenue DESC                                    \
                 )T1                                                              \
               )T2, (SELECT @rowNo:=0,@c:=0)T3                                    \
               WHERE username='%s';"                                              \
               % (self.__article_table, username)

您能帮忙回答一下吗?谢谢~

最佳答案

IF(@c=T1.total_revenue,@rowNo:=@rowNo,@rowNo:=@rowNo+1) AS rowNo,\ @c:=T1.total_revenue 尝试 IF(@c=T1.total_revenue,@rowNo:=@rowNo,@rowNo:=@rowNo+1) AS rowNo,\ (@c:=T1.total_revenue)

关于python - SQL查询在MariaDB控制台中有效,但在python pymysql中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49642091/

相关文章:

python - 如何使用 Flask 在 HTML 页面之间传递变量

MYSQL删除重复项并添加其Cnt列

php - Mysql 子时间当前时间 - $row ['time' ]

mysql - 一旦所有值都可用,就在 SQL 中汇总值

mysql - 使用 MySQL 而不是 MariaDB 的 XAMPP?

mysql - MariaDB 不会创建以大 VARCHAR 作为主键的表

python - 一种在 setup() 中输出 pyunit 测试名称的方法

python - 使用 python 在单个 BLAST 文件中查找最佳相互命中

mysql - 将 SQL 与 INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE 结合使用时出现错误 1064

python - pyglet 无法绘制到第二个显示器上的窗口