SQL基于多个表进行计算

时间:2011-02-11 17:38:12

标签: sql

我有一个简单的数据库,包含以下两个表。

会话表中的id字段之间存在一对多关系 和候选人表格中的session_id字段。

我想要一个SELECT * FROM SESSIONS的查询。

SESSIONS (TABLE)

|| id || title || max_candidates || description ||
|| 01 || fish  || 05             || some string ||
|| 02 || birds || 10             || some string ||

CANDIDATES (TABLE)

|| session_id || user_id ||
|| 01         || user01  ||
|| 02         || user12  ||
|| 02         || user03  ||
|| 02         || user05  ||

但是,除了从会话表中返回信息外, 我还希望它返回一个名为avaliable_spaces计算列

我希望此列返回特定的可用空间数 会话基于(session_id中没有出现CANDIDATES次) - (max_candidates

在上面的示例中,它将返回(显然减去列headders);

|| id || title || max_candidates || description || avaliable_spaces ||

|| 01 || fish  || 05             || some string ||04                ||
|| 02 || birds || 10             || some string ||07                ||

这有意义吗?如果是这样,它甚至可能!? (你可能猜到) 我是一个SQL菜鸟,这远不止我!

2 个答案:

答案 0 :(得分:6)

SELECT S.id,
       S.title,
       S.max_candidates,
       S.description,
       S.max_candidates - COUNT(c.user_id) as available_spaces
FROM   SESSIONS S
       LEFT OUTER JOIN CANDIDATES C
         ON C.session_id = s.id
GROUP  BY S.id,
          S.title,
          S.max_candidates,
          S.description  

答案 1 :(得分:1)

SELECT
    S.*, S.max_candidates - C.Filled AS avaliable_spaces
FROM
    SESSIONS S
    LEFT JOIN
    (
    SELECT session_id, COUNT(*) AS Filled FROM CANDIDATES GROUP BY session_id
    ) C ON S.ID = C.session_id
相关问题