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