一个查询中的JOIN,GROUP BY,COUNT和CASE

时间:2019-06-18 22:51:44

标签: sql sqlite

我有两个表: 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

我已经尝试了很多次,但是拒绝工作 当地精英,我跪下寻求帮助! 依靠你^^

1 个答案:

答案 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,您只需稍作改动即可比较这两个值。