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查询,范围内的最大值和最小值没有得到正确的输出的主要内容,如果未能解决你的问题,请参考以下文章

shell生成指定范围内的随机数

shell生成指定范围内的随机数

Pyspark - 从具有最小值和最大值范围的数组中获取值

生成随机数几种方式

随机数生成器不会使用输入字段中的值生成给定范围内的预期数字[重复]

如何在 MySQL 中获取记录数以及最小值/最大值?