从MySQL表中查找最常用和最少使用的值

时间:2018-03-09 17:57:22

标签: mysql database

我在查找表中最常用和最少使用的值时遇到问题。 问题是我在两个不同的列上有值,在将它们合并在一起后,我无法通过条目数找到正确的排序方式。

首先,我有一个每个电台的表

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 2003,20022001the stations in usestations的位置>

但我得到的是:

2000    10
2001    10
2002    10
2003    10

我希望我可以使用where stations.id_station = Unix这样的东西,希望我能解决问题,但它不会工作,我会收到以下错误

  

错误代码:1054。未知列' Unix'在' where子句'。

有人能帮帮我吗?我已经工作了几个小时,我找不到任何解决方案......

亲切的问候,

Alin Chiver

1 个答案:

答案 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