Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-使用具有SUM的组函数无效_Mysql_Sum - Fatal编程技术网

MySQL-使用具有SUM的组函数无效

MySQL-使用具有SUM的组函数无效,mysql,sum,Mysql,Sum,我在下面的查询中收到错误消息“1111-无效使用组函数”,我不完全确定原因 我最初将SUM的三个组件中的每一个都作为单独的视图,您可以在联接列表中看到该设置的剩余部分,但是由于无法在联接视图中使用索引,因此运行该视图花费的时间太长 SELECT `VehicleClaim`.`id` AS `Vehicle_claim_id`, `VehicleClaim`.`Vehicle_registration_number`, `Claim`.`id` AS `claim_id`, `

我在下面的查询中收到错误消息“1111-无效使用组函数”,我不完全确定原因

我最初将SUM的三个组件中的每一个都作为单独的视图,您可以在联接列表中看到该设置的剩余部分,但是由于无法在联接视图中使用索引,因此运行该视图花费的时间太长

SELECT 
    `VehicleClaim`.`id` AS `Vehicle_claim_id`, `VehicleClaim`.`Vehicle_registration_number`,
    `Claim`.`id` AS `claim_id`, `Claim`.`created` AS `claim_created`, DATE_FORMAT(`Claim`.`created`, '%b') AS `claim_created_month`,
    `ClaimSubtype`.`name` AS `claim_subtype`,
    `Vendor`.`name` as `vendor_name`,

    IF(`VehicleClaim`.`id` IS NOT NULL,
        IF(`VehicleClaimUpdate`.`id` IS NOT NULL, `VehicleClaimUpdateStatus`.`status`, `ClaimStatus`.`status`), 
        IF(`ClaimUpdate`.`id` IS NOT NULL, `ClaimUpdateStatus`.`status`, `ClaimStatus`.`status`)
    ) AS `status`,

    IF(`VehicleClaimUpdate`.`id` IS NOT NULL, `VehicleClaimUpdate`.`result`,
        IF(`ClaimUpdate`.`id` IS NOT NULL, `ClaimUpdate`.`result`, NULL)
    ) AS `result`,

    SUM(
        (IF((`VehicleClaimUpdate`.`conceded_labour_cost` is not null),
            `VehicleClaimUpdate`.`conceded_labour_cost`,
            IF((`ClaimUpdate`.`id` is not null),
                `ClaimUpdate`.`conceded_labour_cost`,
                IF((`Claim`.`repair_order_id` is not null),
                    IF((`RepairOrder`.`cost` is not null),
                        `RepairOrder`.`cost`,
                        SUM((`RepairOrder`.`removal_refit_hours` * `RepairOrderHourlyRate`.`rate`))
                    ),
                    IF((`VehicleClaim`.`id` is not null),SUM((`VehicleClaim`.`work_hours` * `VehicleClaimHourlyRate`.`rate`)),0)
                )
            )
        ))
        + 
        (IF((`VehicleClaimUpdate`.`conceded_material_cost` is not null),
            `VehicleClaimUpdate`.`conceded_material_cost`,
            IF((`ClaimUpdate`.`id` is not null),
                `ClaimUpdate`.`conceded_material_cost`,
                IF((`ClaimMaterial`.`id` is not null),SUM((((`ClaimMaterial`.`unit_cost` * `ClaimMaterial`.`quantity`) * `ClaimMaterial`.`percentage_claimed`) / 100)),0)
            )
        ))
        +
        (IF(`VehicleClaimUpdate`.`conceded_freight_cost` IS NOT NULL,
            `VehicleClaimUpdate`.`conceded_freight_cost`,
            IF(`ClaimUpdate`.`id` IS NOT NULL,
                `ClaimUpdate`.`conceded_freight_cost`,
                IF(`ClaimFreight`.`id` IS NOT NULL, `ClaimFreight`.`cost`, 0)
            )
        ))
    ) AS `total_cost`,

    `User`.`id` AS `user_id`, `User`.`username`,
    `Client`.`id` AS `client_id`
FROM `Vehicle_claims` AS `VehicleClaim` 
    RIGHT JOIN `claims`                     AS `Claim` ON (`Claim`.`id` = `VehicleClaim`.`claim_id`) 
    LEFT JOIN `claim_materials`             AS `ClaimMaterial` ON (`ClaimMaterial`.`claim_id` = `Claim`.`id`)
    LEFT JOIN `claim_freight`               AS `ClaimFreight` ON (`ClaimFreight`.`claim_id` = `Claim`.`id`)
    LEFT JOIN `claim_subtypes`              AS `ClaimSubtype` ON (`ClaimSubtype`.`id` = `Claim`.`claim_subtype_id`)
    LEFT JOIN `repair_orders`               AS `RepairOrder` ON (`RepairOrder`.`id` = `Claim`.`repair_order_id`)
    LEFT JOIN `hourly_rates`                AS `RepairOrderHourlyRate` ON (`RepairOrderHourlyRate`.`id` = `RepairOrder`.`hourly_rate_id`)
    LEFT JOIN `hourly_rates`                AS `VehicleClaimHourlyRate` ON (`VehicleClaimHourlyRate`.`id` = `VehicleClaim`.`hourly_rate_id`)
    -- LEFT JOIN `view_final_material_cost` AS `FinalMaterialCost` ON (`FinalMaterialCost`.`claim_id` = `Claim`.`id` AND `FinalMaterialCost`.`Vehicle_claim_id` = `VehicleClaim`.`id`)
    -- LEFT JOIN `view_final_freight_cost`      AS `FinalFreightCost` ON (`FinalFreightCost`.`claim_id` = `Claim`.`id` AND `FinalFreightCost`.`Vehicle_claim_id` = `VehicleClaim`.`id`)
    -- LEFT JOIN `view_final_labour_cost`       AS `FinalLabourCost` ON (`FinalLabourCost`.`claim_id` = `Claim`.`id` AND `FinalLabourCost`.`Vehicle_claim_id` = `VehicleClaim`.`id`)
    LEFT JOIN `vendor_contacts`             AS `VendorContact` ON (`VendorContact`.`id` = `Claim`.`vendor_contact_id`)
    LEFT JOIN `vendors`                     AS `Vendor` ON (`Vendor`.`id` = `VendorContact`.`vendor_id`)
    LEFT JOIN `users`                       AS `User` ON (`User`.`id` = `Claim`.`user_id`)
    LEFT JOIN `clients`                     AS `Client` ON (`Client`.`id` = `Claim`.`client_id`)
    LEFT JOIN `claim_statuses`              AS `ClaimStatus` ON (`ClaimStatus`.`id` = `Claim`.`claim_status_id`) 
    LEFT JOIN `claim_updates`               AS `ClaimUpdate` ON (`ClaimUpdate`.`id` = `Claim`.`claim_update_id`)
    left join `claim_statuses`              AS `ClaimUpdateStatus` on (`ClaimUpdateStatus`.`id` = `ClaimUpdate`.`claim_status_id`)
    left join `claim_statuses`              AS `VehicleClaimStatus` on (`ClaimStatus`.`id` = `VehicleClaim`.`claim_status_id`)
    LEFT JOIN `claim_updates`               AS `VehicleClaimUpdate` ON (`VehicleClaimUpdate`.`id` = `VehicleClaim`.`claim_update_id`) 
    left join `claim_statuses`              AS `VehicleClaimUpdateStatus` on (`VehicleClaimUpdateStatus`.`id` = `VehicleClaimUpdate`.`claim_status_id`)
WHERE YEAR(`Claim`.`created`) = YEAR(CURDATE())
GROUP BY `VehicleClaim`.`id`

检查结果集是否包含重复的总和。如果是这样,那么组功能肯定会起作用。基本上,当结果集包含唯一值时,GROUP并没有用处。问题似乎是在SUM中使用SUM。我可以通过简单的`>select SUMID从t1复制相同的错误消息;错误1111 HY000:组函数'Hooray for RIGHT JOIN'的使用无效!草莓,讽刺?哈特穆特·霍尔茨格拉夫:我相信你是对的!将三个SUM组件中的每一个都移动到join会起作用吗,或者我会承受与它们是单独视图时相同的性能?我假设联接创建了一个派生数据集,而该数据集不能通过索引联接?