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

MySQL统计外键具有给定值的次数[重复]

  •  0
  • abd  · 技术社区  · 8 年前

    s_state
    ---------
    #id     name
    1       State 1
    2       State 2
    
    d_date
    --------
    #date         #user    state
    2017-01-01        1        1
    2017-01-02        1        1
    2017-01-03        2        1
    

    我想知道,对于一个给定的用户,他在每个州呆了多少次(多少天)。如果使用状态,我当前的查询可以工作,但我的问题是,对于未使用的状态,它不会返回“count 0”。(对于用户1,它将只返回“状态1已使用2次”,但我希望它返回“状态1计数=2,状态2计数=0”)

    以下是我当前的查询:

    SELECT s_state.id, COUNT(date)
    FROM s_state
    LEFT JOIN d_date ON s_state.id = d_date.state
    WHERE d_date.user = 1
    GROUP BY s_state.id
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Moseleyi    8 年前

    试试这个

    SELECT 
        s_state.id AS 'State Id',  
        IFNULL(COUNT(date), 0) AS 'Count'
    FROM s_state
    LEFT JOIN d_date ON s_state.id = d_date.state AND user = 1
    GROUP BY 
        s_state.id, 
        user
    

    如果您使用 user WHERE 子句,它将过滤那些不存在的。A. JOIN 将显示 NULLs 相反,您可以将其转换为0