SQL中的整数变量的问题

发布于 2025-01-30 14:55:16 字数 1179 浏览 2 评论 0原文

我正在尝试过滤我只有数年在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`

I am trying to filter the data I have only for years between 2007 and 20011. The variable I want to filter is an integerano. The query is running but it is not filtering the data in this variable, but it is working to filter the other variable (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`

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

享受孤独 2025-02-06 14:55:16

的优先级高于

这意味着您的:

 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

AND has higher precedence than OR.

This means that your:

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

actually is read as:

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

Instead do:

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

Which also can be written as:

 WHERE `conta` IN ('Rec Tributária', 'Impostos', 'IPTU', 'ITBI', 'ISSQN') 
   AND ano >= 2007 AND ano < 2012
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文