【问题标题】:Querying MySQL to get price from 4 tables查询 MySQL 从 4 个表中获取价格
【发布时间】:2015-12-15 17:33:21
【问题描述】:

我试图在 MySQL 数据库中获取某些服务的价格,计算如下:

我有 4 张桌子:

  • 服务(idService (INT), ...)
  • 日期 (idDate (INT), idService (INT), 日期 (DATETIME), 公里 ( INT), 安装(BOOL), ...)
  • 功能(idFeature (INT)、描述 (VARCHAR)、价格 (FLOAT)、...)
  • Features_Services(idFeature (INT)、idService (INT)、单位 (INT)、折扣 (浮点数), ...)

关系:

  • 日期和服务之间的一对多:因此,服务可以在多个日期进行,每个日期都有相关的公里(以量化差旅费用, 最终服务价格每人 0.6 欧元)和安装(如果在每个日期不活跃,服务价格将递减恒定值,在我的情况下为 100 欧元)...

  • 功能和服务之间通过 Features_Services 实现多对多:因此,许多服务可以关联许多功能。每个功能都有其单一的价格,但关系也有单位和折扣等参数......

嗯,通过以下查询,我正确地得到了服务的价格,但仅与第一次约会的公里数和安装有关...

SELECT 
    CASE 
        WHEN dates.mounting = 0 THEN 
            SUM(features.price * features_services.units * (1 - features_services.discount / 100)) + 0.6 * dates.kilometers - 100
        ELSE 
            SUM(features.price * features_services.units * (1 - features_services.discount / 100)) + 0.6 * dates.kilometers
    END AS servicePrice

FROM features_services
JOIN features ON features_services.idFeature = features.idFeature       
JOIN dates ON features_services.idService = dates.idService                                         
WHERE features_services.idService = XXXXXXX 
GROUP BY dates.idDate LIMIT 1

问题是我需要遍历所有相关的日期以提取公里和安装,并对价格进行必要的更正... 也许在一个选择里面有一个选择,对于日期??

非常感谢任何帮助。 比你提前。

【问题讨论】:

  • 将 FLOAT 数据类型用于金钱是不寻常的。见十进制。

标签: mysql database relational-database


【解决方案1】:

我终于用选择子查询做到了。这是解决方案:

SELECT 
    features_services.idService AS cid,
    SUM(features.price * features_services.units * (1 - features_services.discount / 100)) + 
    (SELECT 0.6 * SUM(dates.kilometers) FROM dates WHERE dates.idService = cid) +
    (SELECT SUM(CASE when dates.mounting = 1 THEN 0 else -100 END) FROM dates WHERE dates.idService = cid) AS importeTotal
FROM features_services
JOIN features ON features_services.idFeature = features.idFeature
WHERE features_services.idService = XXXXXXXX

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    相关资源
    最近更新 更多