mysql 조건에 따라 통계 후 통합 표시
id
num
time
1
123
2019-01-01 11:11:11
2
666
2019-01-01 11:11:11
타임은 어느 달의num 총수보다 작고 타임은 달의num수와 같다는 통계를 필요로 한다.
처음에는 하위 검색어를 사용하려고 했습니다.
SELECT
SUM( a.num ) AS allSum,
( SELECT SUM( b.num ) FROM test b WHERE DATE_FORMAT( b.time, '%Y%m' ) = '201901' ) AS monthSum
FROM
test a
WHERE
DATE_FORMAT( a.time, '%Y%m' ) <= '201901'
이렇게 하면 전체 시계를 두 번 스캔해야 하기 때문에 효율이 매우 떨어진다.
다음과 같이 케이스 when으로 변경했습니다.
SELECT
SUM( CASE WHEN DATE_FORMAT( a.time, '%Y%m' ) <= '201901' THEN num ELSE 0 END ) AS allSum,
SUM( CASE WHEN DATE_FORMAT( a.time, '%Y%m' ) = '201901' THEN num ELSE 0 END ) AS monthSum
FROM
test a
전체 시계를 한 번만 스캔하면 된다.
ps. [총수, 이달수] 형식의 문자열을 되돌려야 합니다. 원래는 sql에서 concat 연결을 사용하려고 했습니다. 예를 들어 다음과 같습니다.
SELECT
CONCAT(
'【',
SUM( CASE WHEN DATE_FORMAT( a.time, '%Y%m' ) <= '201901' THEN num ELSE 0 END ),
',',
SUM( CASE WHEN DATE_FORMAT( a.time, '%Y%m' ) = '201901' THEN num ELSE 0 END ),
'】'
) AS `result`
FROM
test a
검색 효율이 떨어지는 것을 발견하여 프로그램에서 연결하는 것으로 바꿀 수밖에 없었다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SQLite의 query로 망설임이것은 내가 처음 안드로이드 응용 프로그램 개발에서 망설이고, 그 후 해결 된 방법을 비망록으로 철자하고 있습니다. java에서 SQLite를 이용한 애플리케이션을 작성하는 동안 EditText에 입력된 item이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.