누구든지 내 SQL 쿼리가 잘못된 곳을 지적 할 수 있습니까? 데이터를 가져올 때 SUM과 관련하여 원하는 결과를 제공하지 않습니까?
각 조합의 처음 5 개의 VAR_MEASURE_1 결과를 계산하려고합니다. 첫 번째 조합의 경우 -7.00이되어야하지만 4.00이됩니다.
편집-합계 쿼리를 사용하기 전에 데이터가 있습니다.
VAR_MEASURE_1
16587 SBEN -14.000 0.000 2014-09-30 00:31:24
16288 SBEN 3.000 0.000 2014-09-30 00:52:46
16288 SBEN 3.000 0.000 2014-09-30 00:53:59
16006 SBEN 5.000 0.000 2014-09-30 01:16:36
15271 SBEN -4.000 0.000 2014-09-30 01:40:09
15786 SBEN -6.000 0.000 2014-09-29 00:15:02
16097 SBEN 2.000 0.000 2014-09-29 00:17:34
16097 SBEN 2.000 0.000 2014-09-29 00:19:25
15771 SBEN -9.000 0.000 2014-09-29 00:38:49
16155 SBEN 7.000 0.000 2014-09-29 01:13:26
15661 SBEN -9.000 0.000 2014-09-28 17:40:05
14425 SBEN 1.000 0.000 2014-09-28 17:49:09
14425 SBEN 1.000 0.000 2014-09-28 17:50:24
15657 SBEN -9.000 0.000 2014-09-28 18:02:09
15655 SBEN -14.000 0.000 2014-09-28 18:24:31
여기 있습니다
SUMA
15276 Sample 1 SBEN 4.000 2014-09-30 00:31:24
15855 Sample 2 SBEN -77.000 2014-09-29 02:40:56
15661 Sample 3 SBEN -109.000 2014-09-28 17:40:05
$sql = "(SELECT ID, VARIABLE, VAR_MEASURE_1, doe, CONTRACT_CODE, SUM(VAR_MEASURE_1) AS SUMA FROM LIVE_VARCOLL WHERE doe between '2014-09-30 00:00:00' AND '2014-09-30 23:59:59' AND CONTRACT_CODE = 'DEC' AND VARIABLE = 'SBEN' LIMIT 5)
UNION
(SELECT ID, VARIABLE, VAR_MEASURE_1, doe, CONTRACT_CODE, SUM(VAR_MEASURE_1) AS SUMA FROM LIVE_VARCOLL WHERE doe between '2014-09-29 00:00:01' AND '2014-09-29 23:59:01' AND CONTRACT_CODE = 'DEC' AND VARIABLE = 'SBEN'
ORDER BY doe LIMIT 5)
UNION
(SELECT ID, VARIABLE, VAR_MEASURE_1, doe, CONTRACT_CODE, SUM(VAR_MEASURE_1) AS SUMA FROM LIVE_VARCOLL WHERE doe between '2014-09-28 00:00:01' AND '2014-09-28 23:59:01' AND CONTRACT_CODE = 'DEC' AND VARIABLE = 'SBEN'
ORDER BY doe LIMIT 5)
UNION
(SELECT ID, VARIABLE, VAR_MEASURE_1, doe, CONTRACT_CODE, SUM(VAR_MEASURE_1) AS SUMA FROM LIVE_VARCOLL WHERE doe between '2014-09-27 00:00:01' AND '2014-09-27 23:59:01' AND CONTRACT_CODE = 'DEC' AND VARIABLE = 'SBEN'
ORDER BY doe LIMIT 5)
UNION
(SELECT ID, VARIABLE, VAR_MEASURE_1, doe, CONTRACT_CODE, SUM(VAR_MEASURE_1) AS SUMA FROM LIVE_VARCOLL WHERE doe between '2014-09-26 00:00:01' AND '2014-09-26 23:59:01' AND CONTRACT_CODE = 'DEC' AND VARIABLE = 'SBEN'
ORDER BY doe LIMIT 5);";
SUM()
작동 방식을 잘못 해석하고 있습니다.
SUM()
자신을 제한하지 않습니다 LIMIT
- LIMIT
결과에서 얻고 자하는 행 수만 SQL에 알려줍니다. 따라서 귀하의 경우 각 UNION
부분에는 처음 5 개뿐만 아니라 요구 사항을 충족하는 모든 행의 SUM이 있습니다.
특정 조건을 충족하는 테이블의 처음 5 개 행의 합계를 선택하려면 다음 예와 같이 수행해야합니다. 하위 쿼리는 5 개의 행만 검색하고 외부 쿼리는이를 합산 할 수 있습니다.
명확하게 말하면 UNIONed 쿼리 의 첫 번째 부분 의 데이터 만 검색하는 SQL 입니다. 다음 UNION
과 같이 다른 부분을 시도하고 만들 수 있습니다 .
SELECT tmp.*, SUM(tmp.VAR_MEASURE_1) as SUMA
FROM (
SELECT ID, VARIABLE, VAR_MEASURE_1, doe, CONTRACT_CODE
FROM LIVE_VARCOLL
WHERE doe between '2014-09-30 00:00:00'
AND '2014-09-30 23:59:59'
AND CONTRACT_CODE = 'DEC'
AND VARIABLE = 'SBEN'
ORDER BY doe
LIMIT 5
) tmp
따라서 UNION은 다음과 같아야합니다.
(SELECT tmp.*, SUM(tmp.VAR_MEASURE_1) as SUMA
FROM (
SELECT ID, VARIABLE, VAR_MEASURE_1, doe, CONTRACT_CODE
FROM LIVE_VARCOLL
WHERE doe between '2014-09-30 00:00:00'
AND '2014-09-30 23:59:59'
AND CONTRACT_CODE = 'DEC'
AND VARIABLE = 'SBEN'
ORDER BY doe
LIMIT 5
) tmp)
UNION
( SELECT tmp.*, SUM(tmp.VAR_MEASURE_1) as SUMA
FROM (
SELECT ID, VARIABLE, VAR_MEASURE_1, doe, CONTRACT_CODE
FROM LIVE_VARCOLL
WHERE doe between '2014-09-29 00:00:00'
AND '2014-09-29 23:59:59'
AND CONTRACT_CODE = 'DEC'
AND VARIABLE = 'SBEN'
ORDER BY doe
LIMIT 5
) tmp)
UNION
( .... more sqls here if needed ... )
그러나 나는 당신이 일별로 결과를 얻고 싶다고 가정하고, " 하루에 처음 5 개 행 "이 중요 하지 않다면 , 단순히 일별로 그룹화 된 합계 결과를 선택할 수 있습니다 DATE(doe)
.
SELECT ID, VARIABLE, VAR_MEASURE_1, doe, DATE(doe) as date_doe, CONTRACT_CODE, SUM(VAR_MEASURE_1) AS SUMA
FROM LIVE_VARCOLL
WHERE CONTRACT_CODE = 'DEC'
AND VARIABLE = 'SBEN'
GROUP BY DATE(doe)
ORDER BY DATE(doe)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다