我在SQLite数据库中有两个表,我试图通过评级来计算路由的数量。它可以工作,但是当没有具有该评级的路线时,它不会返回0。评级示例为8,或11b,或V3。
我现在使用的查询是:
select routes.rating, count(routes.rating) from routes
left join orderkeys on routes.rating = orderkeys.rating
group by routes.rating
order by orderkeys.key
但是,对于没有任何路线的评级,这不会返回0。我得到的输出是:
10d|3
7|3
8|2
9|9
10a|5
10b|4
10c|2
11a|3
12b|1
V0|5
V1|7
V2|5
V3|8
V4|3
V5|1
V6|2
V7|3
V8|2
V9|1
我期望得到的是:
7|3
8|2
9|9
10a|5
10b|4
10c|2
10d|3
11a|3
11b|0
11c|0
11d|0
12a|0
12b|1
12c|0
12d|0
V0|5
V1|7
V2|5
V3|8
V4|3
V5|1
V6|2
V7|3
V8|2
V9|1
这是架构:
CREATE TABLE routes (
id integer PRIMARY KEY,
type text, rating text,
rope integer,
name text,
date text,
setter text,
color_1 text,
color_2 text,
special_base text,
blurb text,
updater text
);
CREATE TABLE orderkeys (
rating TEXT,
key INTEGER PRIMARY KEY
);
答案 0 :(得分:0)
左连接返回左表中的所有记录,但您想要的是所有评级,即orderkeys
表中的所有记录:
SELECT orderkeys.rating,
COUNT(routes.id)
FROM orderkeys
LEFT JOIN routes USING (rating)
GROUP BY orderkeys.rating
ORDER BY orderkeys.key
答案 1 :(得分:-1)
试试这个。我不喜欢加入很多,但是当有很多表时它非常有用:
select routes.rating, count(routes.rating) from routes, rating
where routes.rating = orderkeys.rating
group by routes.rating
order by orderkeys.key