sql中的MAX或ALL

时间:2017-04-06 07:30:50

标签: mysql sql

我正在做这个问题:

哪些国家的GDP高于欧洲各国? [仅提供名称。](某些国家/地区可能具有NULL gdp值)

网站上的建议答案是:

httpContext.Request.Scheme=="http"

此处使用SELECT name FROM world WHERE GDP >= ALL(SELECT GDP FROM world WHERE population>0 AND continent = 'Europe' ) 关键字,需要使用ALL来处理空值

我的解决方案是这样的:

WHERE population >0

我使用SELECT name FROM world WHERE GDP >= (SELECT MAX(GDP) FROM world WHERE continent = 'Europe') 关键字,似乎在这种情况下我们不需要考虑处理MAX

我的解决方案是对的吗?这两种解决方案的权衡是什么?

2 个答案:

答案 0 :(得分:1)

聚合函数,例如 void InsertBinaryRec(PGconn *conn, double *valueX, char *nameString, double *valueY) { int paramLengths[10]; int paramFormats[3] = { 1, 0, 1 }; const char* values[3] = {(const char *) valueX, nameString, (const char *) valueY }; cout << "ya phr gya????" << endl; paramLengths[3] = 10 ; PGresult *res = PQexecParams(conn, "INSERT INTO testData (X, NAME, Y) VALUES ($1::bytea, $2::TEXT, $3::bytea)", 3, NULL, values, paramLengths, paramFormats, 3); if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "INSERT failed: %s\n", PQerrorMessage(conn)); PQclear(res); CloseConn(conn); } cout << "Insert testData record - OK\n"; PQclear(res); } 忽略MAX - 值,因此条件的含义

NULL

是:如果... WHERE GDP >= (SELECT MAX(GDP) FROM world WHERE continent = 'Europe') 大于或等于定义GDP的每个欧洲国家的GDP,则属实。

它等同于:

GDP

所以这就是你想要实现的目标(我会以这种方式解释练习),然后你的方法是正确的。

答案 1 :(得分:0)

关于两者的表现,可用的内容非常少。该页面可用at MySQL docs

  
      
  • MySQL重写INALLANYSOME子查询,试图利用选择列表的可能性   子查询中的列已编制索引。
  •   
  • MySQL使用包含MIN()MAX()的表达式增强以下表单的表达式,除非NULL值或空集是   涉及:

    value {ALL|ANY|SOME} {> | < | >= | <=} (uncorrelated subquery)
    
         

    例如,这个WHERE子句:

    WHERE 5 > ALL (SELECT x FROM t)
    
         

    可能会被优化器处理为:

    WHERE 5 > (SELECT MAX(x) FROM t)
    
  •   

因此;对于您的特定情况,网站提到使用ALL,因为数据中可能存在NULL值。如果不是这种情况,您可以将ALL替换为MAX,如上所述。