【问题标题】:how to select in select postgresql如何在选择postgresql中进行选择
【发布时间】:2021-03-04 20:51:02
【问题描述】:

我有一个名为 jenis_kelamin 的列,我想在选择查询中显示男性和女性的性别。我有这样的查询,但是出来的数据还是错误的,正确的方法是什么?

SELECT distinct mj.id, mj.nama_pd,
(select distinct count(jenis_layanan) from public.isian_kuis 
 where jenis_kelamin = 'Laki' ) as jumlah_laki,
 (select distinct count(jenis_layanan)
 from public.isian_kuis
 where jenis_kelamin = 'Perempuan' ) as jumlah_perempuan
 FROM public.master_jabatan mj
 join isian_kuis ik on ik.jabatan_id = mj.id
  group by mj.id,mj.nama_pd
   order by mj.id;

我有一个我查询的图像的例子,这仍然是错误的

正确的数据是 ID 30 有两男一女,ID 29 只有一个女人

【问题讨论】:

  • 提供一些示例数据(5-10 行)作为 CREATE TABLE + INSERT INTO(代码格式的文本,而不是图片!)以及该数据的所需输出。
  • 附言。您的子查询每个返回一行(没有 GROUP BY),因此 DISTINCT 在它们中没有任何意义。
  • 如果这就是你得到的,那么没有master_jabatan的ID等于任何isian_kuisjabatan_id
  • @akina 我的问题改了,希望你能理解
  • 我说了,图片没用,提供文字样例数据。

标签: sql postgresql


【解决方案1】:

无需使用嵌套选择,只需像这样使用Group By

SELECT distinct mj.id, 
  mj.nama_pd, 
  SUM(CASE WHEN jenis_kelamin = 'Laki' THEN 1 ELSE 0 end) AS jumlah_laki,
  SUM(CASE WHEN jenis_kelamin = 'Perempuan' THEN 1 ELSE 0 end) AS jumlah_perempuan
FROM public.master_jabatan mj
join isian_kuis ik on ik.jabatan_id = mj.id
group by mj.id,mj.nama_pd
order by mj.id;

【讨论】:

    【解决方案2】:

    在 Postgres 中,您可以使用如下所示的条件聚合:

    SELECT mj.id, mj.nama_pd, 
           COUNT(*) FILTER (WHERE jenis_kelamin = 'Laki')AS jumlah_laki,
           COUNT(*) FILTER (WHERE jenis_kelamin = 'Perempuan')  AS jumlah_perempuan
    FROM public.master_jabatan mj JOIN
         isian_kuis ik 
         ON ik.jabatan_id = mj.id
    GROUP BY mj.id, mj.nama_pd
    ORDER BY mj.id;
    

    请注意,将SELECT DISTINCTGROUP BY 一起使用是非常非常罕见的。这可能会减慢查询速度。而FILTER 是标准 SQL,因此是实现这一点的好方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 2016-11-19
      相关资源
      最近更新 更多