我在postgres10,T1和T2中有2个表,如下所示,我想要3个不同的查询:
表T1
| user_id | user_name | project | nb_hour_doc | nb_doc | doc_start | doc_end | |-----------|:-------------------:|---------:|--------------|:-------:|------------------:|-------------------| |1001 |Toto |OTHERS |11000 |2 |2018-03-25 12:13:00|2018-03-25 12:15:00| |1002 |Diana |GIT |7000 |1 |2018-03-25 13:00:00|2018-03-25 13:15:00| |1003 |Alex |DEV |7001 |3 |2018-03-25 11:03:05|2018-03-25 11:35:40| |1003 |Alex |PLUG |10000 |1 |2018-03-25 12:23:00|2018-03-25 12:25:00| |1002 |Diana |PLUG |7100 |1 |2018-03-25 12:16:00|2018-03-25 12:51:00|
表T2:
| user_id | user_name | project | nb_hour_interv | nb_interv | int_start | int_end | |---------|:---------:|--------:|-------------|--------|---------------------|---------------------| | 1003 | Alex | OTHERS | 71 | 2 | 2018-03-25 12:13:00 | 2018-03-25 12:15:00 | | 1003 | Alex | DEV | 71 | 1 | 2018-03-25 08:11:00 | 2018-03-25 08:30:00 | | 1003 | Alex | OTHERS | 171 | 5 | 2018-03-25 02:08:00 | 2018-03-25 02:45:00 | | 1001 | Toto | NEXT | 31 | 4 | 2018-03-25 13:13:00 | 2018-03-25 13:15:00 | | 1003 | Alex | PLUG | 10 | 1 | 2018-03-25 14:19:00 | 2018-03-25 14:55:00 | | 1002 | Diana | FIRST | 70 | 1 | 2018-03-25 17:43:00 | 2018-03-25 17:55:00 |
以及包含有关用户信息的表:
用户:
| user_id | user_name | |---------|:---------:| | 1002 | Diana | | 1003 | Alex | | 1004 | Boto | | 1001 | Toto |
我使用此查询但未提供预期结果:
select u.user_id, u.user_name, COALESCE(sum(vd.nb_hour_doc),0) as nb_hour_doc, COALESCE(sum(vd.nb_doc),0) as nb_doc, COALESCE(vi.project,'none') as projet_nom_doc, COALESCE(vd.project,'none') as projet_nom_int,
COALESCE(sum(vi.nb_hour_interv),0) as nb_hour_interv, COALESCE(sum(vi.nb_interv),0) as nb_interv from users u
LEFT JOIN T1 vd ON vd.user_id = u.user_id
LEFT JOIN T2 vi ON vi.user_id = u.user_id
GROUP BY vi.project, u.user_id, u.user_name, vd.project
任何人都可以帮助我?
我想要这样的事情:
| user_id | user_name | nb_hour_doc+ nb_hour_interv | |--------- |:---------: |----------------------------- | | 1002 | Diana | 7070 | | 1003 | Alex | 17324 | | 1004 | Boto | 0 | | 1001 | Toto | 11031 |
| user_id | user_name | (nb_doc + nb_interv) | |--------- |:---------: |------------- | | 1001 | Toto | 6 | | 1002 | Diana | 3 | | 1003 | Alex | 13 | | 1004 | Boto | 0 |
| project | (nb_hour_doc+ nb_hour_interv) | |--------- |------------- | | OTHERS | 11242 | | DEV | 7072 | | NEXT | 31 | | PLUG | 10010 | | FIRST | 70 | | GIT | 7000 |
答案 0 :(得分:1)
我认为这应该可以满足您的需求。我只完成了第一个,使用最少的必需信息创建表。它按user_id和user_name进行分组,并为每个用户的几个字段中的值求和。
SELECT u.user_id, u.user_name, COALESCE(SUM(t1.nb_hour_doc), 0) + COALESCE(SUM(t2.nb_hour_interv), 0) AS result
FROM users u
LEFT JOIN t1 USING (user_id)
LEFT JOIN t2 USING (user_id)
GROUP BY u.user_id, u.user_name
您可以在此处进行测试:http://sqlfiddle.com/#!15/483d1/2/0
答案 1 :(得分:1)
我认为这应该有效,尽管我只在MariaDb(MySQL)
中进行了测试编辑:修复了上次项目查询
async