【问题标题】:Count the sum of a column values in a SELECT statement计算 SELECT 语句中列值的总和
【发布时间】:2010-03-05 19:58:44
【问题描述】:

我有一个table,我应该计算用户是否达到了像 3 这样的点数,所以如果用户达到或超过 3 分,他就会被封禁:

table_warnings
- id
- user_id
- warning
- warning_date

id    user_id     warning    warning_date
1     5478        1          2010-02-25 12:59:00
2     5478        1          2010-02-28 08:27:00
3     5478        2          2010-03-01 22:44:11

我有 started this question,用户 KM 帮助我找到了一个像这样的 SELECT 的解决方案:

SELECT COUNT(warning)
FROM table_warnings AS w
INNER JOIN table_users AS u
ON w.user_id = u.user_id
WHERE w.user_id = 5478 AND warning_date >= '2010-02-05 12:59:00'
HAVING COUNT(warning) >= 3

我能否找到一种方法让SELECT 检索用户在过去 30 天内获得的罚分?

【问题讨论】:

  • warn_penalty 字段来自哪里?您没有在示例数据中显示它。和warning一样吗?

标签: php mysql select pdo


【解决方案1】:

什么是“warn_penalty”列。我可以假设它与“警告”相同吗?如果是这样,只需将 COUNT() 更改为 SUM()。通过一些额外的修复来消除第二个表:

SELECT user_id, SUM(warning)
FROM table_warnings 
WHERE  warning_date >= '2010-02-05 12:59:00'
GROUP BY user_id
HAVING SUM(warning) >= 3

将返回所有被禁止的用户。

或者,如果您有一个 user_id 并想知道它是否被禁止:

SELECT SUM(warning)
FROM table_warnings 
WHERE user_id = 5478 AND warning_date >= '2010-02-05 12:59:00'

并检查结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2013-04-25
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多