【问题标题】:SUM() Query returning 0 for every entrySUM() 查询每个条目返回 0
【发布时间】:2017-03-03 00:55:15
【问题描述】:

这是我尝试运行的查询示例:

import sqlite3
import pandas as pd
conn = sqlite3.connect('nfl_data.db')
c = conn.cursor()
newdf = c.execute("""SELECT name, SUM('Rush Yards')
                  FROM collegernr WHERE name ='Doug Martin'
                  GROUP BY name""")
df = pd.DataFrame(newdf.fetchall())
print(df)

我的球员有几年的大学统计数据,我想对这些值求和,这样每个球员的名字只出现一次,每列的值就是他们的大学总数。

运行此查询会为该版本返回的每一行和每一列返回 0(如果我包含更多变量并删除 WHERE name='Doug Martin'):

             0    1
0  Doug Martin  0.0

所有感兴趣的列都被分类为 REAL 或 INTEGER,没有 NULL 值,只有 0,在 Doug Martin 的情况下,甚至没有任何 0,所有严格的正值。

起初我以为可能是年份列造成了问题,但删除它并没有解决任何问题。

任何帮助将不胜感激,我确信在看了这么久之后,我只是错过了一些明显的东西。如果我创建了一个重复的问题,我很抱歉,我无法通过快速 google 或在搜索栏中搜索找到任何内容

【问题讨论】:

  • 忘掉非 MySQL 的东西,看看meta.stackoverflow.com/questions/333952/…
  • 发送您的桌子的describe <TABLE_NAME> 以便能够提供帮助...
  • 对不起,我对使用 SQL 还很陌生,所以我不确定我的问题中包含什么。我无法弄清楚如何让类似于描述 的东西在 python 中工作。你能告诉我你需要什么信息吗?列是:索引 INTEGER、名称 TEXT、RnR_Plays INTEGER、Rec_TD INTEGER、Rec_Yards REAL、Receptions REAL、Rush_Att REAL、Rush_TD INTEGER、RnR_Yards INTEGER、RnR_TD INTEGER、yr INTEGER、大学文本

标签: python mysql sql database sqlite


【解决方案1】:

MySQL 将'Rush Yards' 解析为字符串文字

在数字上下文中解释,计算结果为 0。作为演示:

SELECT 'Rush Yards', 'Rush Yards' + 0

如果意图引用列名,则标识符可以用反引号括起来:

SELECT `Rush Yards`, 'Rush Yards' FROM collegernr
       ^          ^

              SELECT `name`
                   , SUM(`Rush Yards`)
                FROM `collegernr`
               WHERE `name` = 'Doug Martin'
               GROUP BY `name`

【讨论】:

  • 非常感谢您为我解决了这个问题。我不知道如何用空格引用列名,所以我用引号括起来,因为它有效,所以我从来没有想过。
  • 标识符的双引号将是比反引号更好的选择。标准 SQL 使用双引号,SQLite 支持反引号以兼容 MySQL 的非标准行为。
  • 我应该更仔细地确定我的答案是针对 MySQL [ mysql ] 和 MariaDB [ mariadb ],它们使用 bacticks 来转义标识符。如果sql_mode 包含ANSI_QUOTES,那么是的,可以通过将标识符括在双引号中来进行转义。如果没有该设置,用双引号括起来的标记将被解释为字符串文字。在 SQL Server [sql-server] 中,标识符使用方括号进行转义。 Oracle [oracle] 通过始终且仅使用双引号来转义标识符,更加符合 ANSI SQL 标准。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多