【问题标题】:Group by query in MySQL ignoring the values inside brackets在 MySQL 中按查询分组,忽略括号内的值
【发布时间】:2021-03-30 11:23:07
【问题描述】:

我有一个带有 groupby 子句的 SQL 查询 查询如下所示:

SELECT
    products.product_name AS product_name,
    contracts_balance.contract_prod AS contract_prod, 
     SUM( contracts.opt_one_firm + contracts.opt_two_firm + contracts.opt_three_firm +contracts.opt_four_firm +contracts.opt_five_firm +contracts.opt_six_firm)
     AS total_open_balance
FROM
    (
        (
            contracts_balance
        LEFT JOIN products ON
            (
                (
                    contracts_balance.product_id_fk = products.product_id
                )
            )
        )
    LEFT JOIN supplier ON
        (
            (
                products.supplier_id_fk = supplier.supplier_id
            )
        )

         LEFT JOIN contracts ON
        (
            (
                contracts_balance.contract_id_fk = contracts.contract_id
            )
        )
    )
GROUP BY
    products.product_name ,  products.pack_size

输出如下:

在 group by 查询中,我希望查询按名称分组,忽略括号 () 内的文本 所以,它应该只返回 8 行。

谢谢

【问题讨论】:

    标签: php mysql sql database group-by


    【解决方案1】:

    你可以使用substring_index():

    SELECT SUBSTRING_INDEX(p.product_name, ' (', 1) AS product_name,
           cb.contract_prod AS contract_prod, 
           SUM( c.opt_one_firm + c.opt_two_firm + c.opt_three_firm + c.opt_four_firm + c.opt_five_firm + contracts.opt_six_firm) AS total_open_balance
    FROM contracts_balance cb LEFT JOIN
         products p
         ON cb.product_id_fk = p.product_id LEFT JOIN
         supplier s
         ON p.supplier_id_fk = s.supplier_id LEFT JOIN
         contracts c
         ON cb.contract_id_fk = c.contract_id
    GROUP BY SUBSTRING_INDEX(p.product_name, ' (', 1), cb.contract_prod;
    

    注意事项:

    • 表别名使查询更易于编写和阅读。
    • SELECT 中的未聚合列应与 GROUP BY 键匹配。我不明白为什么cb.contract_prodSELECT 中,但不在GROUP BY 中,为什么p.pack_sizeGROUP BY 中而不在SELECT 中。
    • 所有这些括号和空格只会使查询看起来比实际更复杂。

    在查询中使用LEFT JOINs 并按不在第一个表中的列进行聚合也是不规则的——因为它会在不匹配的行上有NULL 值。我怀疑您希望 products 作为 FROM 中的第一个表引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2018-06-30
      • 2018-07-19
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      相关资源
      最近更新 更多