我的数据库中有很多记录,为了数据分析,我需要显示每天的记录数,包括我没有任何记录的日子,所以结果是0
.
例如我有这些记录(SQL Fiddle):
CREATE TABLE Tabs
(`timestamp` varchar(10), `id` int)
;
INSERT INTO Tabs
(`timestamp`, `id`)
VALUES
('2015-01-01', 1),
('2015-01-01', 2),
('2015-01-02', 3),
('2015-01-02', 4),
('2015-01-02', 5),
('2015-01-04', 6),
('2015-01-05', 7),
('2015-01-05', 8)
;
Run Code Online (Sandbox Code Playgroud)
当我使用此查询时:
SELECT `timestamp`, COUNT(*)
FROM Tabs
GROUP BY `timestamp`
Run Code Online (Sandbox Code Playgroud)
我得到了结果:
timestamp COUNT(*)
2015-01-01 2
2015-01-02 3
2015-01-04 1
2015-01-05 2
Run Code Online (Sandbox Code Playgroud)
但我也需要2015-01-03
with 0
,所以对我来说正确的输出是:
timestamp COUNT(*)
2015-01-01 2
2015-01-02 3
2015-01-02 0
2015-01-04 1
2015-01-05 2
Run Code Online (Sandbox Code Playgroud)
请问我怎样才能意识到呢?
这个问题是这个问题的延续:如何从两个不同的表中获取数据?
现在我需要将表Sessions
与 2 个表连接起来:
Input
Downloads
当我将此查询与真实数据一起使用时:
SELECT sessions.ip
, COUNT(sessions.id)
, COUNT(input.input) as TotalInputs
, COUNT(DISTINCT input.input) as UniqInputs
, COUNT(downloads.shasum) as files
, COUNT(DISTINCT download.shasum) as Uniqfiles
FROM sessions, input, downloads
WHERE sessions.id = input.session
AND sessions.session = downloads.session
AND date_format(sessions.starttime, '%Y-%m-%d') > "2015-01-01"
GROUP BY sessions.ip
ORDER BY COUNT(sessions.id) DESC LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
ip | COUNT(sessions.id) | TotalInputs | UniqInputs | files | Uniqfiles
IP1 | 11145 | 11145 | 15 | 11145 | …
Run Code Online (Sandbox Code Playgroud) mysql ×2