我需要一个来自两个表CarCarImage的SELECT查询.每辆车都会有多个图像.我只想返回每辆车的第一个图像(DisplayOrder = 1)的总图像计数和图像名称,但是添加这个WHERE子句会导致图像计数始终等于1.如何仅返回每辆车的第一个图像的总图像计数和图像名称?

我的简化查询如下所示:

SELECT c.Id,
        c.Make,
        c.Model,
        ci.ImageName,
        COUNT(ci.ImageName) AS ImageCount
FROM Car c
JOIN CarImage ci
ON c.Id = ci.CarId
WHERE ci.DisplayOrder = 1
GROUP BY (ci.ImageName) <-- usually need some kind of `GROUP BY` to get count

推荐答案

这有点笨拙,但你可以用条件聚合来实现.因为null总是小于非null.

 SELECT c.Id,
        c.Make,
        c.Model,
        max(case when ci.displayOrder = 1 then ci.ImageName end) as first_image_name,
        COUNT(ci.ImageName) AS ImageCount
   FROM Car c
   JOIN CarImage ci
     ON c.Id = ci.CarId
  GROUP
     BY c.Id,
        c.Make,
        c.Model

Sql相关问答推荐

如何并行SELECT和RESET?

在数据分区内执行确定

对非RUST源代码字符串使用`stringify!`,例如SQL查询

解析SQL Server中的嵌套JSON

如何从JSON数组中 Select 多个值

对多个条件的SQL进行排名

在MS Access Modern图表的X轴上显示时间值时遇到问题

数据库SQL-CTE命名空间(错误?)使用临时视图

如何找到一个组合的两个列,这是不是在其他表在ORACLE SQL?

如何在AWS Athena中 Select JSON数组的最后一个元素?

如何在Hive SQL中分别按多列进行分组?

带聚合函数的 percentile_cont

根据行号将列转置为没有任何id或键列的行

SQL 函数 DIFFERENCE 返回有趣的分数

计算 SQL 中的总体成功率:递归 CTE 还是替代方法?

SQL:如何从时间戳数据生成时间序列并计算不同事件类型的累计总和?

Set vs let vs 在snowflake中声明变量

如何防止 SQL 中的负收入值并将其重新分配到接下来的月份?

SQL查询以获取从特定可变日期看到的用户

在现有日期列的查询结果中添加周数列