我有一个包含状态的表和一个在给定状态下具有日期的表
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
答案 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