我正在做这个问题:
哪些国家的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
值
我的解决方案是对的吗?这两种解决方案的权衡是什么?
答案 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重写
IN
,ALL
,ANY
和SOME
子查询,试图利用选择列表的可能性 子查询中的列已编制索引。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
,如上所述。