SQL 最适合处理数据集。我的建议是使用 SELECT 语句和 MAX() 函数获取最大卫星集,然后将结果集与整个表连接起来。然后测试月亮是否等于最大的,以便打印“是”或“否”。
这是一个使用 MySQL 的示例。我创建了一个包含列moonPlanetOrbited、bodyName、moonMeanRadius 的Moons 表。以下 SQL 为给定的 moonPlanetOrbited 选择最大的 moonMeanRadius:
SELECT moonPlantedOrbited, MAX(moonMeanRadius) as maxMoonRadius
FROM Moons
GROUP BY moonPlanetOrbitede
现在我们有了一个 maxMoonRadius 列表,将结果集与整个表连接并测试 moonMeanRadius 是否等于 maxMoonRadius:
SELECT m1.moonPlanetOrbited, m2.bodyName,
if(m1.moonMeanRadius = m2.maxMoonRadius, 'Yes', 'No') as Largest
FROM Moons m1
JOIN (
SELECT moonPlanetOrbited, MAX(moonMeanRadius) as maxMoonRadius
FROM Moons
GROUP BY moonPlanetOrbited
) m2
ON m1.moonPlanetOrbited = m2.moonPlanetOrbited;
IF 语法来自 MySQL 5.5:
http://dev.mysql.com/doc/refman/5.5/en/control-flow-functions.html#function_if
使用以下 SQL 测试:
CREATE TABLE Moons(
moonPlanetOrbited VARCHAR(255),
bodyName VARCHAR(255),
moonMeanRadius FLOAT
);
INSERT INTO Moons('a', 'b', 1.01);
INSERT INTO Moons('a', 'c', 1.02);
INSERT INTO Moons('a', 'd', 1.03);
INSERT INTO Moons('a', 'e', 1.04);
+-------------------+----------+---------+
| moonPlanetOrbited | bodyName | Largest |
+-------------------+----------+---------+
| a | b | No |
| a | c | No |
| a | d | No |
| a | e | Yes |
+-------------------+----------+---------+
4 rows in set (0.00 sec)