MySQL如何在同一列中分散一些值,但如果满足条件则不分散其他值

时间:2018-12-14 00:48:17

标签: mysql calculated-field

是否可以在同一列中混合一些值,但如果满足特定条件,则不能混合其他值?我不想创建另一列。

我正在使用的查询:

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表包含日期属性类型,orders_sales表与orderline_sales具有1:n的基本关系。如果订单的YEAR高于2017,我只想将SUM结果乘以customer.annual_discount。我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用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