WHERE 절에서 mysql SUM()을 사용합니다.
내가 이 테이블을 가지고 있다고 가정해봐
id | cash
1 200
2 301
3 101
4 700
이전 현금의 합계가 특정 값보다 큰 첫 번째 행을 반환하고 싶습니다.
예를 들어 이전 현금의 합계가 500보다 큰 첫 번째 행을 반환하려면 3행으로 반환해야 합니다.
mysql 문을 사용하여 이 작업을 수행하려면 어떻게 해야 합니까?
사용.WHERE SUM(cash) > 500
동작하지 않다
HAVING 절에서는 비교를 위해 집계를 사용할 수 있습니다.
GROUP BY ...
HAVING SUM(cash) > 500
그HAVING
절에서는 GROUP BY 절을 정의해야 합니다.
이전 현금의 합계가 특정 값보다 큰 첫 번째 행을 얻으려면 다음을 사용합니다.
SELECT y.id, y.cash
FROM (SELECT t.id,
t.cash,
(SELECT SUM(x.cash)
FROM TABLE x
WHERE x.id <= t.id) AS running_total
FROM TABLE t
ORDER BY t.id) y
WHERE y.running_total > 500
ORDER BY y.id
LIMIT 1
집약함수는 서브쿼리에서 발생하므로 집약함수의 컬럼에일리어스는 WHERE 절에서 참조할 수 있습니다.
테스트는 안 했는데, 거의 다 된 것 같은데?
SELECT m1.id
FROM mytable m1
INNER JOIN mytable m2 ON m1.id < m2.id
GROUP BY m1.id
HAVING SUM(m1.cash) > 500
ORDER BY m1.id
LIMIT 1,2
이전 행의 모든 합계를 계산하고 이전 행의 합계가 500보다 큰 행만 얻은 후 하나를 건너뛰고 다음 행을 반환합니다.
일반적으로, 의 상태는WHERE
SQL 쿼리의 절은 하나의 행만 참조할 수 있습니다.의 컨텍스트WHERE
명령어가 정의되기 전에 절이 평가됩니다.ORDER BY
RDBMS 테이블에는 암묵적인 순서가 없습니다.
파생 테이블을 사용하여 각 행을 보다 작은 행 그룹에 결합할 수 있습니다.id
각 합계 그룹의 합계를 산출합니다.그런 다음 합계가 기준에 부합하는지 검사합니다.
CREATE TABLE MyTable ( id INT PRIMARY KEY, cash INT );
INSERT INTO MyTable (id, cash) VALUES
(1, 200), (2, 301), (3, 101), (4, 700);
SELECT s.*
FROM (
SELECT t.id, SUM(prev.cash) AS cash_sum
FROM MyTable t JOIN MyTable prev ON (t.id > prev.id)
GROUP BY t.id) AS s
WHERE s.cash_sum >= 500
ORDER BY s.id
LIMIT 1;
출력:
+----+----------+
| id | cash_sum |
+----+----------+
| 3 | 501 |
+----+----------+
집약 함수를 사용하여 필터링하는 경우 HAVING 문을 사용해야 합니다.
SELECT *
FROM tblMoney
HAVING Sum(CASH) > 500
언급URL : https://stackoverflow.com/questions/3284409/use-mysql-sum-in-a-where-clause
'sourcecode' 카테고리의 다른 글
Django 서버 오류: 포트가 이미 사용 중입니다. (0) | 2022.09.05 |
---|---|
어떻게 하면 WAMP에서 마리아db를 제대로 제거할 수 있을까? (0) | 2022.09.05 |
Java에서 범용 어레이 유형을 생성할 수 없는 이유는 무엇입니까? (0) | 2022.09.05 |
개체 배열에서 .join on 값을 수행합니다. (0) | 2022.09.05 |
Node.js에서 MySQL(ORM 없음)을 어떻게 조롱합니까? (0) | 2022.09.05 |