MySQL计算外键具有给定值的次数

时间:2017-10-17 00:29:04

标签: mysql group-by left-join

我有一个包含状态的表和一个在给定状态下具有日期的表

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 个答案:

答案 0 :(得分:1)

试试这个

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,它将过滤那些不存在的子句。 JOIN会显示NULLs,然后您可以将其转换为0