SQL查询表最有效的方法来返回跨多个列找到的最常见值?

时间:2019-11-22 18:41:14

标签: sql json postgresql

我的表是这样设置的:

party_no   mdl     mfr_cd   asset_id
------------------------------------
013        FA85    DOG      VR67
666        389     POO      9AP
185        CAT     CAT      V7SZ
267        DOG     DOG      87NO 
389        555SUP  DOG      YES
666        DOG     DOG      DOG
185        S08     CAT      83NO
666        DOG     DOG      DOG

我试图找到在所有列中最常见的值,但是它不必在所有3列中都必须存在,而应该在> 1列中

也就是说,我想在唯一的party_no出现频率最高的所有三列(mdl,mfr_cd,asset_id)中找到最常见的值。

因此上述数据将返回如下内容:

party_no   value   count 
------------------------
666        DOG      2
267        DOG      1
185        CAT      1

理想情况下,出现在更多列中的值(例如“ DOG”出现在3列中2次,而不是“ DOG”出现在2列中3次)应该排名更高。

我正在这样做:

select party_no, count(*)
from assets.asset_latest al
where mfr_cd = slsmdl_and_mdfy_no or mfr_cd = ser_no or mfr_cd = equip_asset_alt_nm or slsmdl_and_mdfy_no = ser_no or slsmdl_and_mdfy_no = equip_asset_alt_nm or ser_no = equip_asset_alt_nm
group by party_no
order by count(*) desc

它肯定按顺序排列,以便各列之间具有匹配的值,但是如果该值出现在3列还是2列(如我上面所述)中,则不会排名。另外,where子句中的多个“ =”语句似乎不太有效,因为如果我有更多的列,组合将变得很疯狂。

我会帮忙的。

1 个答案:

答案 0 :(得分:1)

使用popUpViewlateral join

distinct on

Here是db <>小提琴。