CREATE TABLE t
(
a INTEGER NOT NULL,
b INTEGER NOT NULL,
c INTEGER,
PRIMARY KEY (a, b)
)
现在,如果我这样做:
SELECT a,b,c FROM t GROUP BY a;
我期望有得到的每个不同的值只有一次。但既然我也在问b和c,它会给我一个a的每一个值。因此,如果对于a的单个值,有很多行可供选择,那么我如何预测SQL将选择哪一行?我的测试表明它选择返回b最大的那一行。但那是什么逻辑?这将如何适用于blob或日期字符串或其他任何东西?
我的问题:SQL如何在将多行分组在一起时选择显示哪一行?
BTW:我的特殊问题涉及SQLITE3,但我猜这是一个SQL问题不依赖于数据库管理系统...
在某些SQL RDBMS中,您显示的查询是非法的,因此没有纯粹的“SQL”答案。而在SQL的大多数地方,如果没有ORDER BY子句生效,系统可以自由地重新排列它的输出。 – 2011-05-18 14:43:47
它依赖于RDBMS。例如,SQL Server会将您的SELECT语句标记为错误。 – 2011-05-18 14:44:12
感觉就像破损的语法,必须有一个更好的方法来使用“标准”SQL语句获取所需的数据。也许你需要将其分解成多个查询... – Zachary 2011-05-18 14:49:29