簡體   English   中英

如何從結果數據中聚合Oracle SQL?

[英]How to aggregate from result data Oracle SQL?

我有桌子:

+------+-------+-----------------+
| id   | name  | code   | desc   |
+------+-------+-----------------+
| 1    | aa    | 032016 | grape  |
| 1    | aa    | 012016 | apple  |
| 1    | aa    | 032016 | grape  |
| 1    | aa    | 022016 | orange |
| 1    | aa    | 012016 | apple  |
| 1    | aa    | 032016 | grape  |
+------+-------+-----------------+

我嘗試查詢:

SELECT id, name, code, desc, COUNT(code) as view
FROM mytable
GROUP BY id, name, code, desc

結果是:

+------+-------+------------------------+
| id   | name  | code   | desc   | view |
+------+-------+------------------------+
| 1    | aa    | 012016 | apple  | 2    |
| 1    | aa    | 022016 | orange | 1    |
| 1    | aa    | 032016 | grape  | 3    |
+------+-------+------------------------+

我所期望的是這樣的:

+------+-------+----------------------------------------------------+
| id   | name  | code                 | desc               | view   |
+------+-------+----------------------------------------------------+
| 1    | aa    | 012016,022016,032016 | apple,orange,grape | 2,1,3  |
+------+-------+----------------------------------------------------+

誰能幫我匯總結果? 提前致謝

您的餐桌設計讓我有些擔心。 一個水果在表中總是具有相同的代碼是否是偶然的? 那為什么要多余地存放呢? 應該有一個水果表,每個水果及其代碼只能容納一次。 您知道為什么將其稱為關系數據庫系統,不是嗎?

但是,通過查詢,您幾乎可以到達。 您具有每個id,名稱,代碼和desc的計數。 現在,您想進一步匯總。 因此,在下一步中,按ID和名稱分組,因為您似乎希望每個ID和名稱都包含一個結果行。 使用LISTAGG連接組中的字符串:

SELECT 
  id, 
  name, 
  listagg(code, ',') within group(order by code) as codes,
  listagg(desc, ',') within group(order by code) as descs,
  listagg(view, ',') within group(order by code) as views
FROM
(
  SELECT id, name, code, desc, COUNT(*) as view
  FROM mytable
  GROUP BY id, name, code, desc
)
GROUP BY id, name
ORDER BY id, name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM