2017-01-15 64 views
0

我有如下表所示的兩個表,我想列出在任務表中使用的位置行基,並且不重複location.id,也按任務表中的列排序。左連接和分組由

我不知道如何解決它使用組或其他方法?
(我之前也查過截然不同,但是它限制選擇專欄,好像不是我想要的..)
怎麼解決?

location 
id | status | ... 
1 | ... 
2 | ... 

id SERIAL NOT NULL 

task 
id | location_id | create_date | start_date | ... 
1 | 1   | ... 
2 | 1   | ... 
3 | 2   | ... 

id SERIAL NOT NULL 
location_id integer DEFAULT NULL 
create_date timestamp without time zone NOT NULL 
start_date date NOT NULL 

需要輸出結果

location order by task.create_date 
id | ... 
1 | ... 
2 | ... 

查詢

我加選擇t.location_id它的工作原理來算,但我仍然有問題,在選擇行

計數工作

SELECT count(l.*) 
    AS total_row_count 
    FROM location l 
     LEFT JOIN (
      SELECT t.location_id 
      FROM task t 
      GROUP BY t.location_id 
      ) t ON t.location_id = l.id 
     WHERE l.status = ANY($1::int[]) 

選擇

SELECT 
    l.* 
    FROM location l 
     LEFT JOIN (
      SELECT t.location_id, t.create_date 
      FROM task t 
      GROUP BY t.location_id 
     ) t ON t.location_id = l.id 
     WHERE l.status = ANY($1::int[]) 
     ORDER BY t.create_date desc NULLS LAST, 
     l.name asc NULLS LAST, l.id desc NULLS LAST OFFSET $2 LIMIT $3 

錯誤:

column "t.create_date" must appear in the GROUP BY clause or be used in an aggregate function SELECT t.create_date, t.location_id

+0

我不明白你想要得到什麼結果。將它顯示爲一張表格,就像您對樣本數據所做的一樣。 –

+0

請參閱我的更新,我想獲取位置表但不重複位置行 – user1775888

+1

您的示例數據不完整。你能否在相關欄目中提供數據? – GurV

回答

1

你可以簡單地做一個左連接來獲得行的任務表這樣的LOCATION_ID和相應的編號:

select l.id, count(t.location_id) times 
from location l 
left join task t 
on l.id = t.location_id 
group by l.id 
order by max(t.create_date) desc; 

如果LOCATION_ID是您的位置表中的唯一(可能是PK),並且您希望從該表中選擇全部或多個列,則可以將它們同時置於查詢的select和group by子句中。

+0

感謝您的回覆,我的問題是如何獲取行? t.create並不是獨一無二的如何在羣組中使用?但我需要按順序使用它 – user1775888

+0

由於您正在聚合location_id,因此您需要按日期彙總進行排序(可能是我在更新後的答案中使用的最大值或最小值)。 – GurV

+0

select l.location_id ??或者選擇l.id?由l.location_id分組?或l.id或t.location_id? – user1775888

1

如果要列出記錄和表location列只有這樣,你可以使用exists,如下圖所示:

select * from location l where exists (select 1 from task where location_id=l.id) 

你可以找到一個演示here

+0

謝謝你的回覆,但我也想按任務表 – user1775888

+0

列確定,好吧,你從來沒有提到任何關於排序你的問題。如何做*你想訂購你的數據呢?您應該 - 如果可能的話 - 相應地編輯您的原始帖子。 – cars10m

+0

請參閱我的更新 – user1775888