SQL: 改变查询结构

SQL: Changing structure of query

我有一个查询成功 returns 单个值,其中 "day" 在查询中被硬编码,如下所示:

SELECT MAX(theCount) FROM
    (SELECT FK_Hour, Count(FK_Hour) As theCount FROM
        (Select FK_Hour
        From slottime
        INNER JOIN time ON slottime.FK_Hour = time.Hour
        WHERE FK_Hour IN 
            (SELECT time.Hour FROM time WHERE time.day=0 )
        ) As C
        GROUP By FK_Hour
    ) AS counts;

我正在尝试删除这种硬编码,这样两列;即 day:theCount 被退回。

我试过了

SELECT MAX(theCount), day FROM
(SELECT FK_Hour, day As day, Count(FK_Hour) As theCount FROM
    (Select slottime.FK_Hour, time.day
    From slottime
    INNER JOIN time ON slottime.FK_Hour = time.Hour
    ) As C
    GROUP By FK_Hour
) AS counts
GROUP By day;

并执行。但是它returns的值显然不正确(与被查询表中的数据没有明显的关联)

在第一个示例中,如果我没看错,您将获得每个 fk_hour 值在 day = 0 的记录数,并从中选择最大计数。

要对所有天执行此操作,首先编写聚合查询以获取每一天和每一小时对的计数,如下所示:

SELECT t.day, t.hour, COUNT(*) AS numRecords
FROM time t
GROUP BY t.day, t.hour;

一旦你有了它,你就可以通过使用限制 1 来获得最大值:

SELECT t.day, t.hour, COUNT(*) AS numRecords
FROM time t
GROUP BY t.day, t.hour
ORDER BY COUNT(*) DESC
LIMIT 1;

此查询将return 一行,并告诉您在哪一天和哪一小时出现了最多的记录数。