source

1인당 및 연간 수익 계산 방법

bestscript 2022. 12. 12. 21:14

1인당 및 연간 수익 계산 방법

나는 그것이 꽤 간단하다고 생각한다, 단지 감이 잡히지 않을 뿐이다.현시점에서는, 다음의 코드를 사용하고 있습니다.

SELECT s.first_name, s.last_name, s.staff_id, SUM(p.amount) AS 'Revenue'
  FROM payment p
  JOIN staff s
    ON s.staff_id = p.staff_id
 GROUP BY s.staff_id

이것으로 2명의 스탭과 그들의 수익은 얻을 수 있습니다만, 연간 부분은 아직 부족한 상태입니다.

또 sakila 데이터베이스를 사용하고 있습니다만, 누군가 도와주시면 감사하겠습니다.

테이블 편집:

-- sakila.staff definition

CREATE TABLE `staff` (
  `staff_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `first_name` varchar(45) NOT NULL,
  `last_name` varchar(45) NOT NULL,
  `address_id` smallint(5) unsigned NOT NULL,
  `picture` blob DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `store_id` tinyint(3) unsigned NOT NULL,
  `active` tinyint(1) NOT NULL DEFAULT 1,
  `username` varchar(16) NOT NULL,
  `password` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `last_update` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`staff_id`),
  KEY `idx_fk_store_id` (`store_id`),
  KEY `idx_fk_address_id` (`address_id`),
  CONSTRAINT `fk_staff_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON UPDATE CASCADE,
  CONSTRAINT `fk_staff_store` FOREIGN KEY (`store_id`) REFERENCES `store` (`store_id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;


CREATE TABLE `payment` (
  `payment_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `customer_id` smallint(5) unsigned NOT NULL,
  `staff_id` tinyint(3) unsigned NOT NULL,
  `rental_id` int(11) DEFAULT NULL,
  `amount` decimal(5,2) NOT NULL,
  `payment_date` datetime NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`payment_id`),
  KEY `idx_fk_staff_id` (`staff_id`),
  KEY `idx_fk_customer_id` (`customer_id`),
  KEY `fk_payment_rental` (`rental_id`),
  CONSTRAINT `fk_payment_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`) ON UPDATE CASCADE,
  CONSTRAINT `fk_payment_rental` FOREIGN KEY (`rental_id`) REFERENCES `rental` (`rental_id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `fk_payment_staff` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`staff_id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=16050 DEFAULT CHARSET=utf8mb4;

이것은 단순히 연도를 더하는 것만으로 실행할 수 있습니다.GROUP BY절은 다음과 같습니다.

SELECT s.first_name, s.last_name, s.staff_id, SUM(p.amount) AS 'Revenue'
     , YEAR(payment_date) AS year
  FROM payment p
  JOIN staff s
    ON s.staff_id = p.staff_id
 GROUP BY s.staff_id, year
;

즉, A/S를 생성합니다.SUM같은 행을 가진 각 그룹에 대해(staff_id, year)쌍들.

그 결과:

+------------+-----------+----------+----------+------+
| first_name | last_name | staff_id | Revenue  | year |
+------------+-----------+----------+----------+------+
| Mike       | Hillyer   |        1 | 33255.38 | 2005 |
| Mike       | Hillyer   |        1 |   234.09 | 2006 |
| Jon        | Stephens  |        2 | 33646.95 | 2005 |
| Jon        | Stephens  |        2 |   280.09 | 2006 |
+------------+-----------+----------+----------+------+

언급URL : https://stackoverflow.com/questions/70486653/how-do-i-calculate-the-revenue-earned-per-person-and-per-year