簡體   English   中英

Mysql 按組計數出現作為列值

[英]Mysql count occurrence by group as a column value

我做了以下查詢:

select ba_brand, ceil(sum((sk_front + sk_depth + sk_warehouse + (sk_exhibition  IS NOT NULL))) / count(distinct(vi_pdv_id_pdv))) as 'inventory',
count(vi_pdv_id_pdv)
from sf_visit_stock

join sf_visit on sk_vi_id_visit = id_visit
join sf_pdv on vi_pdv_id_pdv = id_pdv
join sf_format on pdv_fo_id_format = id_format
join sf_group on fo_gr_id_group = id_group
join sf_channel on gr_ch_id_channel = id_channel

join sf_product on sk_pd_id_product = id_product
join sf_family on pd_fa_id_family = id_family
join sf_brand on fa_ba_id_brand = id_brand

where (CASE WHEN from_unixtime(vi_scheduled_start,'%Y-%m-%d') between '2014-10-01' and '2014-10-31' AND vi_vs_id_visit_status in (1,2,3,4,6) THEN 4 END)
and vi_pr_id_proyect = 5 and ba_rival = 0 and id_brand in (72,75,76,77,78,79,80)
and sf_channel.ch_channel not in ("CHAINS DIRECTS", "CHAINS INDIRECTS", "INDEPENDENTS", "SUPERMARKET")

group by ba_brand

換句話說,我正在做一些值的sum()

sum((sk_front + sk_depth + sk_warehouse + (sk_exhibition  IS NOT NULL))

從多行:

count(vi_pdv_id_pdv)

但是這些行中的 ID 是重復的,因此count(vi_pdv_id_pdv)返回一個計算所有這些重復 ID 的值。 我想獲得那些vi_pdv_id_pdv的值,而無需計算重復項。 這里有一個小例子。 通過這個查詢,我得到以下結果:

My Product |    32031 | 1098

在本例中,1098 計算重復值。 我想得到:

My Product |    32031 | 534

該計數沒有重復值。 我知道group by語句可以像我讀過的這個答案一樣計算沒有重復項,但是我無法實現與我在上面向您展示的查詢中的內容類似的內容。

重復來自哪里?

我認為它們是由您的一個加入引起的。 您可以向此連接添加其他子句以擺脫它們。 例子:

SELECT *
FROM sf_visit_stock AS vs
JOIN sf_visit AS v ON vs.sk_vi_id_visit = v.id_visit AND v.somevalue = 1

也可以在 WHERE 子句中去掉它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM