我在查找表中最常用和最少使用的值时遇到问题。 问题是我在两个不同的列上有值,在将它们合并在一起后,我无法通过条目数找到正确的排序方式。
首先,我有一个每个电台的表
drop table if exists stations;
create table stations (
id_station int not null auto_increment,
st_name varchar (100),
primary key (id_station)
)auto_increment = 2000;
insert into stations values (null, 'Kobenhavn H'),
(null, 'Orestad'),
(null, 'Tarnby'),
(null, 'CPH Lufthavn');
select * from stations;
带有票证的表格包含有关正在使用的电台的所有信息。
drop table if exists tickets;
create table tickets (
id_ticket int not null auto_increment,
starting_point varchar (100),
ending_point varchar (100),
id_train int,
departure_date date,
primary key (id_ticket),
foreign key (id_train) references trains (id_train)
)auto_increment = 100;
如您所见,最常用的值为2000
,使用4
次;最少使用的值为2001
,仅使用1
时间。
insert into tickets values ( null, 2000, 2003, 1, '2018.05.14'),
( null, 2000, 2003, 1, '2018.05.14'),
( null, 2003, 2000, 1, '2018.05.18'),
( null, 2002, 2000, 3, '2018.06.2 '),
( null, 2001, 2002, 3, '2018.06.4 ');
select * from tickets;
在这里,我必须找到最少和最拥挤的电台
我尝试union all
以便将两列合二为一。
(select starting_point as 'All stations in use' from tickets)
union all
(select ending_point from tickets);
上面的部分效果很好,但问题是我不知道如何将它与以下部分联系起来。
SELECT
stations.id_station AS 'All stations in use',
COUNT(*) AS 'Number of passengers'
FROM
(SELECT starting_point
FROM tickets
UNION ALL
SELECT ending_point from tickets) as Unix, stations
GROUP BY stations.id_station
ORDER BY COUNT(*);
我想获得的是:
2000 4
2003 3
2002 2
2001 1
来自第一个查询或表2000
2002
,2001
和the stations in use
为stations
的位置>
但我得到的是:
2000 10
2001 10
2002 10
2003 10
我希望我可以使用where stations.id_station = Unix
这样的东西,希望我能解决问题,但它不会工作,我会收到以下错误
错误代码:1054。未知列' Unix'在' where子句'。
有人能帮帮我吗?我已经工作了几个小时,我找不到任何解决方案......
亲切的问候,
Alin Chiver
答案 0 :(得分:0)
您可以使用union all
select point, count(*) from (
select starting_point point
from tickets
union all
select ending_point
from tickets) t
group by point