Mysql查询,范围内的最大值和最小值没有得到正确的输出
Posted
技术标签:
【中文标题】Mysql查询,范围内的最大值和最小值没有得到正确的输出【英文标题】:Mysql query, max and min values in a range doesn't get the proper output 【发布时间】:2013-12-12 14:41:15 【问题描述】:我有一个名为“dati”的表,其中“anni”列(主键)表示从 1960 年到 2012 年的年份(所有年份都是连续的),“governi”列表示对表“governi”的引用”和“pil”列是我想用“governi”表中“presidenti”列中的值提取的值。 如果我尝试提取所有年份的最小/最大值,它会起作用。但在这种情况下,我需要在有限的年份范围内(例如从 1980 年到 1990 年)提取这些值。问题是它不返回任何最大值/最小值。 表“dati”和表“governi”连接在“governo”列和“cod”列之间,如您在数据库架构中所见。
这是数据库结构:
TABLE dati:
anno INT(4),
governo VARCHAR(6),
pil FLOAT(10)
TABLE governi:
cod VARCHAR(6),
presidente varchar (50)
这是 SQL:
查询1:
SELECT a.presidente, b.anno, b.$dato
FROM governi AS a
INNER JOIN dati AS b ON a.cod=b.governo
WHERE b.$dato =(
SELECT MAX(c.$dato) AS maxpil
FROM dati AS c
) AND b.anno BETWEEN $inizio AND $fine;
查询2:
SELECT a.presidente, b.anno, b.$dato
FROM governi AS a
INNER JOIN dati AS b ON a.cod=b.governo
WHERE b.$dato = (
SELECT MIN(NULLIF(c.$dato,0)) AS valore
FROM dati AS c
) AND b.anno BETWEEN $inizio AND $fine;
我该如何解决这个问题?
【问题讨论】:
这与 php 无关。这纯粹是一个 SQL 构造问题。我已经去掉了不相关的 PHP 代码,只留下了 sql。 考虑提供适当的 DDL 和/或 sqlfiddle 以及所需的结果集 正确形成的问题包含答案的种子。问题的质量与无法找到答案之间存在很强的相关性。 我认为问题是我对问题的基本解释?... ...抱歉我的英语不好。我试图在 sqlfiddle 上上传表格和查询:sqlfiddle.com/#!2/a57ee/1 【参考方案1】:试试这个
SELECT a.presidente, b.anno, b.$dato
FROM governi AS a
INNER JOIN dati AS b ON a.cod=b.governo
WHERE b.$dato =(
SELECT MAX($dato) AS maxpil
FROM dati,governi WHERE anno BETWEEN $inizio AND $fine AND governi.cod=dati.govern
)
SQL Fiddle
【讨论】:
【参考方案2】:试试这个查询:
SELECT a.presidente, b.anno, q.valore, q.maxpil
FROM governi AS a
INNER JOIN dati AS b ON a.cod=b.governo
JOIN (
SELECT MAX(anno) AS maxpil,
MIN(anno) AS valore
FROM dati AS c
WHERE c.anno BETWEEN
1965 -- $inizio
AND
2012 -- $fine
) AS q
ON b.anno BETWEEN q.valore AND q.maxpil
演示 --> http://www.sqlfiddle.com/#!2/480e9/14
【讨论】:
以上是关于Mysql查询,范围内的最大值和最小值没有得到正确的输出的主要内容,如果未能解决你的问题,请参考以下文章