我的表是这样设置的:
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子句中的多个“ =”语句似乎不太有效,因为如果我有更多的列,组合将变得很疯狂。
我会帮忙的。