我在postgres數據庫中有一列記錄我們網站上的頁面的搜索querystrings。如何統計postgres中一組querystrings的整數頻率
列包含像
"a=2&b=4"
"a=2,3"
"b=4&a=3"
"a=4&a=3"
我想找出每個值的頻率爲一定的參數(a)中的數據。
value | freq
------|------
3 | 3
2 | 2
4 | 1
無論如何在單個SQL語句中執行此操作?
我在postgres數據庫中有一列記錄我們網站上的頁面的搜索querystrings。如何統計postgres中一組querystrings的整數頻率
列包含像
"a=2&b=4"
"a=2,3"
"b=4&a=3"
"a=4&a=3"
我想找出每個值的頻率爲一定的參數(a)中的數據。
value | freq
------|------
3 | 3
2 | 2
4 | 1
無論如何在單個SQL語句中執行此操作?
事情是這樣的:
with all_values as (
select string_to_array(split_part(parameter, '=', 2), ',') as query_params
from the_table d,
unnest(string_to_array(d.querystring, '&')) as x(parameter)
where x.parameter like 'a%'
)
select t.value, count(*)
from all_values av, unnest(av.query_params) as t(value)
group by t.value
order by t.value;
嘗試這樣的事:
select data_value,count(*) from (
select data_name,unnest(string_to_array(data_values,',')) data_value from (
select split_part(data_array,'=',1) data_name ,split_part(data_array,'=',2) data_values from (
select unnest(string_to_array(mydata,'&')) data_array from mytable
) a
) b
) c where data_name='a' group by 1 order by 1
假設保持計數THA表稱爲paramcount
:
WITH vals(v) AS
(SELECT regexp_replace(p, '^.*=', '')
FROM regexp_split_to_table(
'b=4&a=3,2',
'&|,'
) p(p)
)
INSERT INTO paramcount (value, freq)
SELECT v, 1 FROM vals
ON CONFLICT (value)
DO UPDATE SET freq = paramcount.freq + 1
WHERE paramcount.value = EXCLUDED.value;
統計值
select v, count(*) from (
SELECT c,unnest(string_to_array(unnest(regexp_matches(c,'a=([0-9,]+)','g')),',')) as v FROM qrs
) x group by v;
參數多態:
WITH argname(aname) as (values ('a'::TEXT))
select v, count(*) from (SELECT c,unnest(string_to_array(unnest(regexp_matches(c,aname||'=([0-9,]+)','g')),',')) as v FROM qrs,argname) x group by v;