【问题标题】:MySQL count how many times foreign key has a given value [duplicate]MySQL计算外键有多少次给定值[重复]
【发布时间】:2017-10-17 00:29:04
【问题描述】:

我有一张带有状态的表格和一张带有给定状态下日期的表格

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

对于给定的用户,我试图获取他在每个州的次数(多少天)。如果使用状态,我当前的查询有效,但我的问题是它不会为未使用的状态返回“计数 0”。 (对于用户 1,它只会返回“State 1 used 2 times”,但我希望它返回“State 1 count = 2, State 2 count = 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

【问题讨论】:

  • 你只有两个状态还是X?我假设您想将所有状态加入所有用户,无论他们是否有条目?
  • 没错,我想看看每个状态被用户 X 使用了多少次
  • d_date.user = 1 移至 ON 子句,如重复问题中所述。
  • 驾驶室您将 IF 放入您的选择中?比如 SELECT IF(COUNT(date) > 0, COUNT(date), 0)。无法检查,可能是计数为空?

标签: mysql group-by left-join


【解决方案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

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

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2014-05-07
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多