SQL-запрос работает в консоли MariaDB, но не в Python Pymysql

Мой SQL-запрос работает в CLI MariaDB, но не работает в Python Pymysql.

Мои требования:

Я хочу получить номер записи (COUNT (*)) с тем же именем пользователя, а затем получить ранг(rowNo) для каждого пользователя, если два имени пользователя имеют одинаковые записи (COUNT (*)), ранг(rowNo) будет также быть таким же (@rowNo:=@rowNo).

Выпуск:

Ниже SQL работает в CLI MariaDB, одинаковое количество записей имеет одинаковый ранг (rowNo). Но в Python Pymysql, то же количество reocord имеет другой ранг (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)

Не могли бы вы помочь, чтобы ответить на это? Благодаря ~

1 ответ

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)

Другие вопросы по тегам