我的 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/