【问题标题】:Inner Selection, Sum of colunms with conditions order by Region内部选择,按区域排序的列的总和
【发布时间】:2021-08-10 11:42:13
【问题描述】:

选择后,我得到了我的新透明表

     SELECT a.sta_name, a.product, a.product_id, a.date, a.active, a.region_id, a.brand, a.brand_id  from
        (SELECT DISTINCT sta_name, product, product_id, date, active, region_id, brand, brand_id FROM `sv_ziyaret` 
        WHERE brand_id=2 and date between "2021-07-00" and "2021-07-31" order by region_id) a

所以我得到了我的价值观DISTINCT

sta_name | product | product_id | active | region_id | brand | brand_id| date |
3M         A            1          1          1          A1       1     2021-07-02
2M         A            1          0          1          A1       1     2021-07-02
5M         B            2          0          1          A1       1     2021-07-05
4M         B            2          0          2          A1       1     2021-07-06
M          A            2          1          2          A1       1     2021-07-10
2M         C            3          1          4          A1       1     2021-07-12
3M         B            2          1          4          A1       1     2021-07-15

sta_name 永远不会与相同的 region_idproducts 重复。 我试图得到的是

product_id | product | active_on | active_off | region_id
1             A           12           2            1
1             A            7           9            2
2             B            6          10            1
2             B           16           5            2
3             C           10           5            4

我的主要目的是能够计算产品在每个地区的存在百分比。例如,A 产品在 A 地区有 %80 的现货销售。

我可以手动获得每个产品的结果

SELECT 
    product, product_id, region_id,
    SUM(CASE WHEN sv_ziyaret.active = 1 THEN 1 ELSE 0 END) var, 
    SUM(CASE WHEN sv_ziyaret.active = 0 THEN 1 ELSE 0 END) yok 
FROM 
    `sv_ziyaret` 
WHERE 
  product_id=37 and date between "2021-07-00"  and "2021-07-31" and region_id=7 order by region_id

但这不是一个好的解决方案,我需要它能够通过仅提供 brand_id 来获得每个产品。 希望得到一手真的会像我一样弱

【问题讨论】:

    标签: mysql sql mariadb


    【解决方案1】:

    您非常接近通用解决方案。你只需要 GROUP BY AND LAST_DAY()

    SELECT 
        product, product_id, region_id, LAST_DAY(date) month_ending,
        SUM(CASE WHEN sv_ziyaret.active = 1 THEN 1 ELSE 0 END) var, 
        SUM(CASE WHEN sv_ziyaret.active = 0 THEN 1 ELSE 0 END) yok 
    FROM 
        sv_ziyaret
    WHERE 
    GROUP BY product, product_id, region_id, LAST_DAY(date)  
    ORDER BY region_id, LAST_DAY(date), product_id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 2011-07-01
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      相关资源
      最近更新 更多