mysql 如果满足条件,如何将同一列中的某些值相乘,但不相乘其他值

mysql how to mulitply some values in the same column but not others if it meets a condition

如果值满足特定条件,是否可以将同一列中的某些值乘以其他值而不是其他值?我不想再创建一个专栏。

我正在处理的查询:

SELECT
    name ,
    ROUND(SUM(orderline_sales.amount * orderline_sales.price) * orders_sales.discount * customers.annual_discount) AS total_revenue
FROM
    orderline_sales 
        JOIN
    orders_sales  ON orders_sales.id = orderline_sales.orders_sales_id
        JOIN
    employee ON orders_sales.empoyee_id = employee.id
        JOIN 
    customers ON orders_sales.customer_id = customers.id
WHERE
    date BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 365 DAY) AND CURRENT_DATE
GROUP BY employee.name
ORDER BY totale_omzet DESC
LIMIT 1;

orders_sales table 包含日期属性类型,orders_sales table 与 orderline_sales 有 1:n 基数关系。如果订单的年份高于 2017 年,我只想将 SUM 结果乘以 customers.annual_discount。我该怎么做呢?

你可以使用CASE。

  SELECT 
     CASE WHEN YEAR > 2017 THEN
      ROUND(SUM(orderline_sales.amount * orderline_sales.price) * 
  orders_sales.discount * 
        customers.annual_discount)
   ELSE 
   (orderline_sales.price * orders_sales.discount * customers.annual_discount) 
   END  AS total_revenue FROM orderline_sales 
        JOIN
    orders_sales  ON orders_sales.id = orderline_sales.orders_sales_id
        JOIN
    employee ON orders_sales.empoyee_id = employee.id
        JOIN 
    customers ON orders_sales.customer_id = customers.id
   WHERE
      date BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 365 DAY) AND CURRENT_DATE
     GROUP BY employee.name
   ORDER BY totale_omzet DESC