【问题标题】:Mysql query, max and min values in a range doesn't get the proper outputMysql查询,范围内的最大值和最小值没有得到正确的输出
【发布时间】: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

标签: mysql max inner-join between


【解决方案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

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 1970-01-01
      • 2016-07-09
      • 2019-02-11
      • 2014-03-22
      • 2020-10-03
      • 2016-08-31
      • 2015-10-25
      • 1970-01-01
      相关资源
      最近更新 更多