sql - 一个查询中的 JOIN、GROUP BY、COUNT 和 CASE

标签 sql sqlite

我有两张 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/

相关文章:

sql - 数据库字段的默认大小

php - SQL : many Many MANY tables vs one huge table? 哪个更快

c# - SQL CommandText 语法不正确

sql - Big Query INSERT INTO 与WITH子句给出错误

sqlite - System.Data.Sqlite 和 FTS4

php - SQLite3查询列出数据库中的所有表只显示一张表

mysql - 查询连接同表错误

android - SQLite异常: (near "Table": syntax error)

node.js - 无法在 Node 6.x 中 NPM 安装 SQLite3

android - 将csv导入mysql和sqlite时换行