如何使用join

时间:2019-02-13 04:57:05

标签: sql postgresql

select date(datetime) as dates,
        user_id,
        sum(CASE When status='completed' Then 1 Else 0 End ) as completed,
        sum(CASE When status='incompleted' Then 1 Else 0 End ) as incompleted,
        sum(CASE When status!='' Then 1 Else 0 End ) as total 
from routine_streak 
where user_id ='"+user_id+"' 
and datetime  between '"+start+"' and '"+end+"' 
group by user_id,date(datetime)

我想加入以将这两个表结合起来:

我有两个表,一个是快速表,另一个是条纹,我必须使用配置文件字段和ID从另一个表(条纹)中获取路名。我想使用join从postgresql查询中的streaktable中的快速表中获取路名...

这是我的桌子:很快

CREATE TABLE IF NOT EXISTS quick(
   id integer DEFAULT nextval('quick_id_seq'::regclass) NOT NULL,
   profile integer NOT NULL,
   wayname character varying NOT NULL,
   datetime timestamp without time zone NULL,
);

第二张表:条纹

CREATE TABLE IF NOT EXISTS streak(
id integer DEFAULT nextval('streak_id_seq'::regclass) NOT NULL,
user_id integer NOT NULL,
wayid integer NOT NULL,
status character varying(50)  DEFAULT NULL::character varying NULL,
day character varying(50)  DEFAULT NULL::character varying NULL,
streak character varying(50)  DEFAULT NULL::character varying NULL,
datetime timestamp without time zone NULL,
CONSTRAINT "routine_streak_pkey" PRIMARY KEY (id)

);

输出应类似于:

user_id:11,
wayname:abc,
way_id:12,
dates: 2019-01-30,
completed: 1
incompleted: 1,
total: 2

1 个答案:

答案 0 :(得分:0)

如果quick中的id是主键,那么普通联接将解决问题。

select
    q.wayname
    , date(s.datetime) as dates, user_id, sum(CASE When status='completed' Then 1 Else 0 End ) as completed, sum(CASE When status='incompleted' Then 1 Else 0 End ) as incompleted, sum(CASE When status!='' Then 1 Else 0 End ) as total
    from routine_streak s
    join quick q on s.user_id = q.id
    where user_id ='"+user_id+"' and datetime between '"+start+"' and '"+end+"'
    group by user_id,date(datetime), q.wayname

或者,您更喜欢使用子查询,然后

select
    (select wayname from quick q where s.user_id = q.id) wayname
    , *
from ( #{your query goes here} ) s