如何为每个组添加填充值?

时间:2020-09-17 14:23:47

标签: postgresql

我有以下数据

CREATE TABLE list (
    entries TEXT[],
    category_id TEXT,
    group_id TEXT
);
CREATE TABLE cat (
    category_id TEXT,
    name TEXT
);
INSERT INTO list (entries, category_id, group_id) VALUES
 ('{{1,2,3},{4,5,6},{7,8,9}}', 'c1',  'g1'),
 ('{{1,2,3},{4,5,6},{7,8,9}}', 'c2',  'g1'),
 ('{{1,2,3},{4,5,6},{7,8,9}}', 'c3',  'g2'),
 ('{{1,2,3},{4,5,6},{7,8,9}}', 'c4',  'g2');
INSERT INTO cat (category_id, name) VALUES
 ('c1',  'Cat1'),
 ('c2',  'Cat2'),
 ('c3',  'Cat3'),
 ('c4',  'Cat4');

我想输出

   entries                     cat_id  group_id
 ('{{1,2,3},{4,5,6},{7,8,9}}', 'c1',  'g1'),
 ('{{1,2,3},{4,5,6},{7,8,9}}', 'c2',  'g1'),
 ('[]',                        'c3',  'g1'),
 ('[]',                        'c4',  'g1'),
 ('[]',                        'c1',  'g2'),
 ('[]',                        'c2',  'g2'),
 ('{{1,2,3},{4,5,6},{7,8,9}}', 'c3',  'g2'),
 ('{{1,2,3},{4,5,6},{7,8,9}}', 'c4',  'g2');

2 个答案:

答案 0 :(得分:0)

您可以使用CROSS JOIN生成类别和组的笛卡尔积,然后将它们与条目合并。

chart.getDescription().setEnabled(false);
chart.setDrawGridBackground(false);

chart.setHighlightFullBarEnabled(false);

chart.getXAxis().setDrawGridLines(false);
chart.getAxisLeft().setDrawGridLines(false);
chart.getAxisRight().setDrawGridLines(false);
chart.getAxisRight().setDrawLimitLinesBehindData(false);
chart.getAxisLeft().setDrawLabels(false);
chart.getAxisRight().setDrawLabels(false);
chart.getXAxis().setDrawLabels(false);
chart.getXAxis().setDrawLimitLinesBehindData(false);
chart.getLegend().setEnabled(false);

注意:可以通过SELECT COALESCE(entries, '{}') AS entries, attrs.category_id, attrs.group_id FROM (SELECT * FROM (SELECT category_id FROM cat) cc CROSS JOIN (SELECT DISTINCT group_id from list) gg ) attrs LEFT JOIN list lst ON attrs.category_id=lst.category_id AND attrs.group_id=lst.group_id ORDER BY attrs.group_id, attrs.category_id; 表选择组,但最好对其进行一些规范化并移至单独的表(特别是如果有更多与组相关的数据)

答案 1 :(得分:0)

使用CTE生成cross的{​​{1}}:

(group_id, category_id)