我有两个表: 1)行星 ID 名称 from_sun moons_number //整数 planet_class 2)月亮 ID 名称 planet_id //等于上一个表格中的行星id is_major
任务是:
获取以下数据: 1)行星的名称, 2)根据月球卫星数,行星的卫星数, 3)根据行星表的行星数, 4)名为“比较”的列,其值是“ +”或“-”(第2和3列中的值比较的结果,如果相等则为“ +”,如果不同则为“-”)。
通过比较结果然后通过行星名称对结果集进行排序。 注意:包括没有卫星的行星。
这是我的尝试:
SELECT p.name AS planet
,COUNT(m.id) AS m1
,p.moons_number AS m2
,CASE WHEN m1=m2 THEN '+'ELSE '-' END AS comparison
FROM planets AS p
LEFT JOIN moons AS m
ON p.id=m.planet_id
GROUP BY planet
ORDER BY comparison, planet
我已经尝试了很多次,但是拒绝工作 当地精英,我跪下寻求帮助! 依靠你^^
答案 0 :(得分:1)
我认为此查询可能有效。
SELECT
p.name AS planet,
COUNT(m.id) AS m1,
max(p.moons_number) AS m2,
CASE WHEN COUNT(m.id)=max(p.moons_number) THEN '+' ELSE '-' END AS comparison
FROM planets AS p
LEFT JOIN moons AS m
ON p.id=m.planet_id
GROUP BY p.name
ORDER BY 4,1;
由于该行星的moons_number
值应该只有一个,因此您只需执行一个max
即可获得该值,然后group by planet
将是有效的。
对于case when
,您只需稍作改动即可比较这两个值。