小编use*_*060的帖子

如何在数据库中显示没有任何记录的 0 行

我的数据库中有很多记录,为了数据分析,我需要显示每天的记录数,包括我没有任何记录的日子,所以结果是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-03with 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)

请问我怎样才能意识到呢?

mysql

3
推荐指数
1
解决办法
108
查看次数

如何从三个不同的表中获取数据

这个问题是这个问题的延续:如何从两个不同的表中获取数据?

现在我需要将表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

1
推荐指数
1
解决办法
738
查看次数

标签 统计

mysql ×2