【问题标题】:Mysql count with 3 tablesMysql计数3个表
【发布时间】:2013-07-03 11:37:12
【问题描述】:

我有三张桌子:

用户: id、姓名
班次: id、date_start、date_end
users_shifts: user_id、shift_id

我想获取所有在特定日期范围完成n班次的用户,其中n可以是任何整数(也可以是0!)。

我可以像这样获取所有用户的轮班次数:

SELECT 
    users.*,
    COUNT(users_shifts.user_id) AS nr_shifts
FROM 
    users
LEFT JOIN 
    users_shifts ON users.id = users_shifts.user_id
GROUP BY 
    users.id

我不知道如何:
1) 将日期范围添加到此查询
2) 将结果限制为特定的 nr_shifts

非常感谢任何帮助。

【问题讨论】:

  • 还在苦苦挣扎?提供一个 sqlfiddle。

标签: mysql join count


【解决方案1】:
SELECT 
users.*,
COUNT(users_shifts.user_id) AS nr_shifts
FROM 
users
LEFT JOIN 
users_shifts ON users.id = users_shifts.user_id
WHERE shifts.date_end = '10/OCT/2012'
GROUP BY 
users.id
Order by users.id
LIMIT 10

【讨论】:

    【解决方案2】:

    第二次加入不能满足您的需要?

    SELECT 
        users.*,
        COUNT(users_shifts.user_id) AS nr_shifts
    FROM 
        users
    LEFT JOIN 
        users_shifts ON users.id = users_shifts.user_id
    LEFT JOIN
        shifts ON shifts.id = users_shifts.shift_id
    WHERE
        shifts.date_start BETWEEN 2013-06-01 and 2013-06-30
        OR ISNULL(shifts.date_start)
    GROUP BY 
        users.id
    

    【讨论】:

    • 这适用于日期范围,但现在我只得到用户至少有一个班次的结果。我只想要具有特定班次数(也可以是 0)的用户。
    • 抱歉,省略了 where 子句的后半部分。现在就在里面。
    猜你喜欢
    • 2011-02-01
    • 2016-12-08
    • 2012-04-04
    • 1970-01-01
    • 2018-12-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多