我有两张 table :
1)行星
ID
姓名
from_sun
moons_number//整数
行星类
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
我尝试了很多次,但它拒绝工作
本地精英,我跪下求你的帮助!
指望你^^
最佳答案
我认为这个查询可以工作。
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
,您现在可以将这两个值与这个小变化进行比较。
关于sql - 一个查询中的 JOIN、GROUP BY、COUNT 和 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56658021/