代码之家  ›  专栏  ›  技术社区  ›  CodeFusionMobile

如何在选择count()函数时联接SQL表?

  •  2
  • CodeFusionMobile  · 技术社区  · 15 年前

    我有两个数据库表:“list”和“notes”。
    列表有列_id,listname
    Notes有列\u id、选中列、列表\u id(这是列表的外键)。还有更多与此问题无关的列。

    我想创建一个返回四列的查询:
    lists.\u id,lists.listname,此列表中所有选中笔记的计数,此列表中所有笔记的计数。

    查询应返回列表中的所有条目。

    我可以使用以下查询分别获取计数和列表名称

    SELECT _id, listname FROM Lists
    SELECT count(checked) FROM Notes WHERE checked='1' and list_id=foo_id
    SELECT count(*) FROM Notes WHERE list_id=foo_id
    

    在这些语句中,foo-id指的是我要为其计算检查项和总计项的列表的id。

    有人能告诉我如何把这些都放到一个查询中吗?

    为count列在那里引发as的奖励点数。

    2 回复  |  直到 15 年前
        1
  •  8
  •   Peter Lang    15 年前

    编辑 :增加 IFNULL 归来 0 当外部联接不返回行时,按计数检查;添加别名。

    SELECT
      l._id,
      l.listname,
      IFNULL( SUM(n.checked), 0 ) AS count_checked,
      COUNT(*) AS count_total
    FROM lists l
    LEFT OUTER JOIN notes n ON ( l._id = n.list_id )
    GROUP BY l._id, l.listname
    
        2
  •  1
  •   Ray    15 年前
    SELECT _id, listname, 
        (SELECT count(checked) FROM Notes WHERE checked='1' and Notes.list_id=Lists.list_id ) AS count_checked,
        (SELECT count(*) FROM Notes WHERE Notes.list_id=Lists.list_id) as count_all
      FROM Lists