1

这是我的桌子,我应该取MAX (id) 每张桌子的status_id.

id      status_id
10          1
11          1
12          2
13          2
14          2
15          4
16          4

所以,我使用了这个 sql 查询,它确实有效并获取了我所有的最大 ID。

select status_id, max(id) as max FROM `table` 
where status_id in (1,2,3,4) group by status_id

这个 sql 命令使用 while 获取我 3 个 MAX id。

十一、十四、十六……

你看,没有任何适合 3rd 的 id status_id。如果没有任何合适的 id 到 3rd status_id,只需将其标记为零。所以我希望 sql 会带来这些结果:

11、14、0、16

4

2 回答 2

4

您可以创建一个子查询,该子查询基本上具有ID您需要的所有 ' 并对其进行左连接。

SELECT  a.status_ID,
        IFNULL(MAX(b.id), 0) maxVal
FROM    
        (
            SELECT 1 status_ID UNION ALL 
            SELECT 2 UNION ALL
            SELECT 3 UNION ALL
            SELECT 4 
        ) a
        LEFT JOIN `table` b ON a.status_id = b.status_id
GROUP   BY a.status_id
于 2013-09-12T06:36:06.437 回答
0

您可以加入一个包含所有 id 和 stats_id 值为 0 的临时虚拟表:

SELECT dummy.status_id, COALESCE(MAX(id), 0) AS max
FROM (
        SELECT 1 status_id
  UNION SELECT 2 status_id
  UNION SELECT 3 status_id
  UNION SELECT 4 status_id
) dummy
LEFT JOIN `table` 
ON dummy.status_id = table.status_id
GROUP BY dummy.status_id

但这无法扩展并且是维护的噩梦(您必须更改虚拟选择以防出现新的 status_id)。如果您有一个包含所有 status_ids 的表,请将 dummy-select 替换为该表。

于 2013-09-12T06:36:32.593 回答