【问题标题】:Mysql count occurrence by group as a column valueMysql按组计数出现作为列值
【发布时间】:2014-10-30 22:57:21
【问题描述】:

我进行了以下查询:

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 语句要计算没有重复,就像我读过的this answer 一样,但我无法实现与上面显示的查询类似的东西。

【问题讨论】:

  • 您应该为所有表设置别名。很难理解您的联接,因为我们不知道表中列的名称。如果两个表具有相同名称的列,您也将避免出现问题。

标签: mysql sql find-occurrences


【解决方案1】:

【讨论】:

  • 我已经尝试过了,但我尝试了count(distinct vi_pdv_id_pdv),结果不一样了。谢谢
【解决方案2】:

重复来自哪里?

我认为它们是由您的一个联接引起的。您可以向此联接添加附加子句以摆脱它们。示例:

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 子句中去掉它们。

【讨论】:

    猜你喜欢
    • 2020-03-28
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2014-09-20
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多