单个MySQL语句到JOIN表并进行一些计算

时间:2014-03-24 02:32:45

标签: php mysql sql join

我有两张名为" book"和" setting_category"。我想和他们一起创建一个新的实地电话" final_price"通过样本计算得出结果。

如何使用单个MySQL语句来执行此操作?

我尝试了但没有一个声明:

SELECT * FROM setting_category JOIN book ON book.cate_id =
setting_category.cate_id WHERE cate_name = 'Fiction'

SELECT * , (CASE WHEN special_offer_type = 'Fixed Value' THEN price -
special_offer WHEN special_offer_type = 'Discount %' THEN price * (1 -
(special_offer /100)) END) AS final_price FROM book

book_id cate_id book_name   price   special_offer   special_offer_type      
1       1       AAA         125     5               FixedValue      
2       1       BBB         90      30              Discount%       
3       2       CCC         150     50              FixedValue

setting_category

cate_id cate_name                       
1       Fiction                     
2       Dictionary

result_table

book_id cate_id book_name   price   special_offer   special_offer_type  cate_name       final_price
1       1       AAA         125         5           FixedValue          Fiction         120
2       1       BBB         90          30          Discount%           Fiction         63
3       2       CCC         150         50          FixedValue          Dictionary      100

2 个答案:

答案 0 :(得分:0)

您可以使用case语句进行计算:

select b.*, sc.cate_name,
       (case when special_offer_type = 'FixedValue'
             then b.price - b.special_offer
             when special_offer_type = 'Discount%'
             then b.price * (1 - b.special_offer/100.0)
             else b.price
        end) as final_price
from book b join
     setting_category sc
     on b.cate_id = sc.cate_id;

答案 1 :(得分:0)

组合它们的最简单方法是从两个表(t1.fieldA,t1.fieldB,t2.fieldC等)中提取所需的所有字段,然后创建一个类似于刚用case语句执行的字段。所以它看起来像这样:

SELECT
     (CASE WHEN t1.special_offer_type = 'Fixed Value' THEN t1.price - t1.special_offer WHEN t1.special_offer_type = 'Discount %' THEN t1.price * (1 - (t1.special_offer /100)) END) AS final_price,
     t1.book_id,
     t1.book_name,
FROM
     book t1
JOIN
     setting_category t2
 ON
     t1.cate_id = t2.cate_id
 WHERE
     t2.WHERE cate_name = 'Fiction';