【问题标题】:How to count results from each column transposing in rows using window functions如何使用窗口函数计算每列转置的结果
【发布时间】:2020-10-29 18:26:25
【问题描述】:

我有疑问

SELECT
cn.country_name,
pbi.gender,
pbi.first_name,
pbi.last_name, pbi.iq_level,
pf.dominate_feature, pv.political_view,
—RANK() OVER(ORDER BY gender DESC) AS "rank",--1,529
—RANK() OVER(ORDER BY iq_level DESC) AS "iq_rank",--rank by iq
—ROW_NUMBER() OVER(ORDER BY 1) AS rownum, — how many rows, numere each row
RANK() OVER(PARTITION BY first_name ORDER BY political_view DESC) AS rnk_pol_view
FROM person_basic_info pbi
JOIN country_names cn ON cn.id = pbi.country_id
JOIN persons_features pf ON pf.person_id = pbi.id
JOIN political_views pv ON pv.person_id = pbi.id;

结果是

+--------------+--------+-------------+---------------+----------+-------------------+-------------------------+--------------+
| country_name | gender | first_name | last_name | iq_level | dominate_feature | political_view | rnk_pol_view |
+--------------+--------+-------------+---------------+----------+-------------------+-------------------------+--------------+
| Yemen | Male | Abeu | Flieg | 118 | Conscientiousness | Liberal feminism | 1 |
| Yemen | Female | Adeline | Munt | 101 | Conscientiousness | Classical liberalism | 1 |
| Yemen | Female | Adey | Jobbing | 145 | Openness | Ordoliberalism | 1 |
| Yemen | Female | Adore | Dorwood | 105 | Conscientiousness | Neoliberalism | 1 |
| Yemen | Female | Adrianna | Wardhaugh | 125 | Agreeableness | Individualism | 1 |
| Yemen | Male | Adriano | Grieswood | 160 | Agreeableness | Neoliberalism | 1 |
| Yemen | Female | Afton | Kleanthous | 87 | Extraversion | Market liberalism | 1 |
| Yemen | Male | Aguie | Lampbrecht | 138 | Conscientiousness | Liberal feminism | 1 |
| Yemen | Male | Aguistin | Basnett | 145 | Extraversion | Ordoliberalism | 1 |
| Yemen | Male | Ahmad | Billingham | 122 | Agreeableness | Neoliberalism | 1 |
| Yemen | Female | Aime | Adrianello | 111 | Agreeableness | Liberal feminism | 1 |
+--------------+--------+-------------+---------------+----------+-------------------+-------------------------+--------------+

但是 期望的结果是:

+--------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+--------+
| Gender | Count_by_gender | Conscientiousness | Openness | Agreeableness | Extraversion | Liberal feminism | Classical liberalism | Ordoliberalism | Neoliberalism | Individualism | Market liberalism | Avg_Iq |
+--------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+--------+
| Female | count(*) | count(*) | count(*) | count(*) | count(*) | count(*) | count(*) | count(*) | count(*) | count(*) | count(*) | avg() |
| Male | count(*) | count(*) | count(*) | count(*) | count(*) | count(*) | count(*) | count(*) | count(*)
 
| count(*) | count(*) | avg() |
+--------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+--------+

你能用窗口函数帮忙吗?

【问题讨论】:

    标签: sql postgresql count


    【解决方案1】:

    我看不出窗口函数适合哪里。我认为您需要条件聚合:

    SELECT pbi.gender, COUNT(*),
           COUNT(*) FILTER (WHERE gender = 'Female') as female,
           COUNT(*) FILTER (WHERE gender = 'Male') as male,
           COUNT(*) FILTER (WHERE pf.dominate_feature = 'Conscientiousness') as Conscientiousness,
           . . .
    FROM person_basic_info pbi JOIN
         country_names cn
         ON cn.id = pbi.country_id JOIN
         persons_features pf
         ON pf.person_id = pbi.id
    GROUP BY gender
    

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 2019-10-29
      • 2020-12-16
      • 2019-04-07
      • 1970-01-01
      相关资源
      最近更新 更多