일관성 없는 MySQL 쿼리 결과
P粉514458863
2023-08-15 21:47:39
<p>특정 결제 시스템에서 이루어진 거래를 보관하는 "거래"라는 테이블이 있습니다.
예를 들어 2023년 7월의 일일 보고서를 받고 싶었고 다음 쿼리를 실행했습니다. </p>
<pre class="brush:sql;toolbar:false;">SELECT DAY(생성됨), count(*) FROM `트랜잭션`
상태 = '승인됨' 및 월(생성됨) = 07 및 연도(생성됨) = 2023
일별 그룹(생성됨)
</pre>
<p>결과가 며칠 건너뛰는 경우가 있습니다. 예를 들어 매월 7일에는 아무것도 얻지 못하지만 검색어를 다음과 같이 변경하면 </p>
<pre class="brush:sql;toolbar:false;">SELECT DAY(생성됨), count(*) FROM `트랜잭션`
상태 = '승인됨' 및 월(생성됨) = 07 및 연도(생성됨) = 2023년 및 일(생성됨) = 7
일별 그룹(생성됨);
</pre>
<p> (기본적으로 쿼리에 <code>DAY(CREATED) = 7</code> 추가)</p>
<p>7일째의 개수를 반환합니다.</p>
<p>왜 일관성이 없나요?
첫 번째 쿼리에서 이 문제를 어떻게 해결할 수 있습니까? </p>
<p>미리 감사드립니다 :)</p>
<p>편집:
테이블 구조 및 데이터 예: </p>
<pre class="brush:sql;toolbar:false;">CREATE TABLE `트랜잭션`(
`ID` int는 NULL이 아닙니다.
`PLATFORM_ID` int NULL이 아님,
`ENTITY_ID` int NULL이 아님,
`RELATED_TRANSACTION_ID` int NULL이 아님 기본값 '0',
`ORIGIN_ID` varchar(120) NOT NULL,
`BANK` varchar(64) 기본 NULL,
`AMOUNT` 이중 NULL이 아님,
`CURRENCY` varchar(3) NULL이 아닙니다.
`TYPE` varchar(2) 문자 집합 utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
'생성됨' 날짜/시간이 NULL이 아닙니다.
`CARD_NO` varchar(20) 기본 NULL,
`CARD_BRAND` varchar(45) 기본 NULL,
`CARD_EXPIRE_YEAR` int DEFAULT NULL,
`CARD_EXPIRE_MONTH` varchar(45) 기본 NULL,
`HOLDER_NAME` varchar(256) 문자 세트 utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`이메일` varchar(256) 기본 NULL,
`STATUS` enum('승인됨','거부됨','필터링됨','보류 중') 문자 설정 utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`IS_3D`tinyint(1) DEFAULT NULL,
`CREATED_AT` 날짜 시간은 NULL이 아닙니다. 기본 CURRENT_TIMESTAMP,
`AMOUNTEUR` 이중 DEFAULT NULL,
`IS_FRAUD`tinyint(1) NOT NULL DEFAULT '0',
`FRAUD_DATE` 날짜 기본값 NULL,
`KYC_DATE` 날짜/시간 기본값 NULL
) 엔진=InnoDB 기본 CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
</pre>
<p>삽입 예: </p>
<pre class="brush:sql;toolbar:false;">INSERT INTO `transaction`(`ID`, `PLATFORM_ID`, `ENTITY_ID`, `RELATED_TRANSACTION_ID`, `ORIGIN_ID`, `BANK`, `AMOUNT` , `CURRENCY`, `TYPE`, `CREATED`, `CARD_NO`, `CARD_BRAND`, `CARD_EXPIRE_YEAR`, `CARD_EXPIRE_MONTH`, `HOLDER_NAME`, `EMAIL`, `STATUS`, `IS_3D`, `CREATED_AT`, ` AMOUNTEUR`, `IS_FRAUD`, `FRAUD_DATE`, `KYC_DATE`) 값
(1, 1, 87, 0, '219114359', 'SOME BANK', 150, 'USD', 'DB', '2022-02-01 00:00:17', '000000XXXXXX0000', 'MasterCard', 2025 , '06', 'NAME FAMILY', 'aaaaaaaaa@gmail.com', '승인됨', 0, '2022-08-25 13:12:58', 150.7605, 0, NULL, NULL);
</pre>
<p>이 경우에는 관련성이 없다고 생각하기 때문에 색인 정의를 생략했습니다. </p>
MySQL 콘솔에서 실행한 후 문제를 발견했습니다. 이유는 간단합니다. PhpMyAdmin 시스템은 보기를 25개 행으로만 제한합니다...
이건 내 실수야! :영형 시간을 내어 지원해주신 모든 분들께 진심으로 감사드립니다!