在 SQL 中过滤整数变量时出现问题

Problem with filter a integer variable in SQL

我正在尝试过滤我只有 2007 年到 20011 年之间的数据。我要过滤的变量是一个整数ano。查询是 运行 但它没有过滤此变量中的数据,但它正在过滤另一个变量 (conta)。

SELECT 
    `ano`, `sigla_uf`, `id_municipio`, 
    MAX(CASE WHEN (`conta` = 'Rec Tributária') THEN (`valor`) END) AS `tax_fees`, 
    MAX(CASE WHEN (`conta` = 'Impostos') THEN (`valor`) END) AS `tax`, 
    MAX(CASE WHEN (`conta` = 'IPTU') THEN (`valor`) END) AS `iptu`, 
    MAX(CASE WHEN (`conta` = 'ITBI') THEN (`valor`) END) AS `itbi`, 
    MAX(CASE WHEN (`conta` = 'ISSQN') THEN (`valor`) END) AS `issqn`
FROM
    (SELECT 
         `ano`, `sigla_uf`, `id_municipio`, `conta`, `valor`
     FROM 
         (SELECT 
              CAST(`ano` AS INT) AS `ano`, `sigla_uf`, `id_municipio`, 
              `estagio`, `portaria`, `conta`, `estagio_bd`, 
              `id_conta_bd`, `conta_bd`, `valor`
          FROM 
              `basedosdados.br_me_siconfi.municipio_receitas_orcamentarias`)
     WHERE
         (`conta` = 'Rec Tributária' OR `conta` = 'Impostos' OR 
          `conta` = 'IPTU' OR `conta` = 'ITBI' OR `conta` = 'ISSQN' 
          AND ano >= 2007 AND ano < 2012))
GROUP BY 
    `ano`, `sigla_uf`, `id_municipio`

AND 的优先级高于 OR

这意味着您的:

 WHERE
     (`conta` = 'Rec Tributária' OR `conta` = 'Impostos' OR 
      `conta` = 'IPTU' OR `conta` = 'ITBI' OR `conta` = 'ISSQN' 
      AND ano >= 2007 AND ano < 2012))

实际读作:

 WHERE
     (`conta` = 'Rec Tributária' OR `conta` = 'Impostos' OR 
      `conta` = 'IPTU' OR `conta` = 'ITBI' OR
       (`conta` = 'ISSQN' AND ano >= 2007 AND ano < 2012))

改为:

 WHERE
     (`conta` = 'Rec Tributária' OR `conta` = 'Impostos' OR 
      `conta` = 'IPTU' OR `conta` = 'ITBI' OR `conta` = 'ISSQN')
  AND ano >= 2007 AND ano < 2012

也可以写成:

 WHERE `conta` IN ('Rec Tributária', 'Impostos', 'IPTU', 'ITBI', 'ISSQN') 
   AND ano >= 2007 AND ano < 2012