![](/img/trans.png)
[英]SELECT with lower case + unaccent + multiple columns in PostgreSQL
[英]PostgreSQL Select on multiple columns
我必須進行查詢,該查詢將在整數類型的幾列上顯示使用的數字和使用的時間。
為此,我制作了一個小的示例表,其中包含適合粘貼到pgAdmin的sql編輯器中的代碼:
DROP TABLE IF EXISTS mynums;
CREATE TABLE mynums
(rowindex serial primary key, mydate timestamp, num1 integer, num2 integer, num3 integer);
INSERT INTO mynums (rowindex, mydate, num1, num2, num3)
VALUES (1, '2015-03-09 07:12:45', 1, 2, 3),
(2, '2015-03-09 07:17:12', 4, 5, 2),
(3, '2015-03-09 07:22:43', 1, 2, 4),
(4, '2015-03-09 07:25:15', 3, 4, 5),
(5, '2015-03-09 07:41:46', 2, 5, 4),
(6, '2015-03-09 07:42:05', 1, 4, 5),
(7, '2015-03-09 07:45:16', 4, 1, 2),
(9, '2015-03-09 07:48:38', 5, 2, 3),
(10, '2015-03-09 08:15:44', 2, 3, 4);
請幫助構建一個查詢,該查詢將在num1,num2和num3列中給出使用數字和使用時間的結果,並按使用時間排序。
結果應為:
number times
2 7
4 7
1 4
3 4
5 5
您需要將列轉換為行才能進行匯總:
select number, count(*)
from (
select num1 as number
from mynums
union all
select num2
from mynums
union all
select num3
from mynums
) t
group by number
order by number;
通常,具有num1,num2,num3之類的列表明數據庫設計存在問題。 如果您需要增加更多的數字會怎樣? 最好創建一對多關系並將與行rowindex
關聯的數字存儲在單獨的表中。
這將工作:
select number, count(*) as times
FROM (
select rowindex, mydate, num1 as number FROM mynums
UNION ALL
select rowindex, mydate, num2 FROM mynums
UNION ALL
select rowindex, mydate, num3 FROM mynums
) as src
group by number
order by count(*) desc, number
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.