【问题标题】:Want to know the number of times a value appears on a given date想知道某个值在给定日期出现的次数
【发布时间】:2023-03-14 16:16:01
【问题描述】:

我将尝试以尽可能简单的方式解释这一点。我希望能够计算每天在我的数据库表中输入值的次数。

基本上,如果数据输入一次将计为单次,如果数据输入两次则计为双次,如果数据输入三次则计为三次。

然后我希望能够计算在特定时间范围内(每年 4 月到 4 月)出现了多少单打、双打和三打。然后当然将它们回显到 php 页面上,如下所示:

单打 - 23 双打 - 69 高音 - 3

我尝试在数据库表中添加一个 round_id 列,因为我想如果这是默认值 1,我可以以某种方式计算每天出现多少个 1 会起作用,但我完全卡住了。

任何帮助将不胜感激!

【问题讨论】:

  • 请给出表格布局 (DESCRIBE) 和一些示例数据
  • 抱歉 Kaii 我是新手,所以刚刚注意到您的评论,我会尝试解释更多。
  • 抱歉 Kaii 我是新手,所以刚刚注意到您的评论,我将尝试解释更多。这是我为球童的工作而构建的球童日志。每天我都想填写这些字段,如果我做两轮,我会填写两次,所以我希望这算作双轮。目前表格看起来像这样,虽然它不是最终的。数据库表:回合日期round_length课程additional_caddies支付笔记round_id我已经设法呼应了总回合数,这只是最新的“回合”,但是做我想做的事情比我对php和mysql的了解要多一点。跨度>

标签: php mysql


【解决方案1】:

如果我的理解正确,首先,我们可以按天计算:

SELECT COUNT(*) AS cnt, `date`
FROM `table`
GROUP BY `date`

这将为您提供每天的记录数。

然后我们可以将其包装在另一个查询中:

SELECT dailycount.daycnt AS `type`, COUNT(*) AS cnt
FROM (
    SELECT COUNT(*) AS daycnt, `date`
    FROM `table`
    GROUP BY `date`
) dailycount
WHERE `date` BETWEEN start_date AND end_date
GROUP BY daycnt

这会给你这样的东西:

type cnt
1    23
2    69
3    3

type 将是您的单打、双打等。

【讨论】:

  • 谢谢瑞恩,我在这里有点挣扎。我可以使用您的第一个 SELECT COUNT 来显示每天是 1、2 还是 3。但是,当我尝试使用第二个 SELECT COUNT 时,它一直说“数据库查询失败:每个派生表都必须有自己的别名”。如果你不介意的话,我可能需要更多关于 PHP 方面的帮助。
  • 抱歉,我修改了我的查询以在子查询上使用别名 - 这应该可以解决它。
  • 我仍然无法让它工作。我如何在 PHP 中做到这一点?我可以显示第一个数字,但第二个 SELECT 再次出现错误。我如何回显它以显示如下?
  • @user1296020 不要说“有错误”。显示实际的错误消息,以便其他人可以帮助您。
  • 对不起:数据库查询失败:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在“WHERE date BETWEEN start_date AND end_date”附近使用的正确语法
【解决方案2】:

在不知道结构的情况下,这是我能想到的最好的 SQL: SELECT COUNT(DISTINCT field) FROM table GROUP BY field

这将计算每个值的字段出现次数。

【讨论】:

    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多