MySQL의 여러 테이블에서 카운트(*)
MySQL의 여러 테이블에서 카운트(*)를 선택하려면 어떻게 해야 합니까?
예를 들어 다음과 같습니다.
SELECT COUNT(*) AS table1Count FROM table1 WHERE someCondition
JOIN??
SELECT COUNT(*) AS table2Count FROM table2 WHERE someCondition
CROSS JOIN? subqueries?
SELECT COUNT(*) AS table3Count FROM table3 WHERE someCondition
편집:
목표는 다음과 같이 반환하는 것입니다.
+-------------+-------------+-------------+
| table1Count | table2Count | table3Count |
+-------------+-------------+-------------+
| 14 | 27 | 0 |
+-------------+-------------+-------------+
각 tableCount에 대해 1개의 서브쿼리를 사용하여 실행할 수 있습니다.
SELECT
(SELECT COUNT(*) FROM table1 WHERE someCondition) as table1Count,
(SELECT COUNT(*) FROM table2 WHERE someCondition) as table2Count,
(SELECT COUNT(*) FROM table3 WHERE someCondition) as table3Count
이 작업은 다음과 같은 서브쿼리를 사용하여 수행할 수 있습니다.
select (SELECT COUNT(*) FROM table1 WHERE someCondition) as table1Count,
(SELECT COUNT(*) FROM table2 WHERE someCondition) as table2Count
다음은 특정 테이블에 조건이 없는 경우 여러 테이블에서 행 수를 순수하게 가져오는 간단한 방법입니다.
주의:
InnoDB의 경우 이 카운트는 근사치입니다.그러나 MyISAM의 경우 카운트는 정확합니다.
문서에서 인용한 내용:
행의 수MyISAM과 같은 일부 스토리지 엔진은 정확한 수를 저장합니다.InnoDB와 같은 다른 스토리지 엔진의 경우 이 값은 근사치이며 실제 값과 40%에서 50%까지 차이가 날 수 있습니다.이 경우 SELECT COUNT(*)를 사용하여 정확한 카운트를 구합니다.
사용방법information_schema.tables사용할 수 있는 테이블:
SELECT
table_name,
table_rows
FROM
information_schema.tables
WHERE
table_name like 'my_table%';
출력:
table_name table_rows
my_table_1 0
my_table_2 15
my_table_3 30
UNION 사용 가능
SELECT COUNT(*) FROM table1 WHERE someCondition
UNION
SELECT COUNT(*) FROM table2 WHERE someCondition
UNION
SELECT COUNT(*) FROM table3 WHERE someCondition
이렇게 하면 돼요.
SELECT (select count(*) from table1) + (select count(*) from table2) as total_rows
원하는 만큼 테이블을 추가할 수 있습니다.
다음으로 변경해 보겠습니다.
SELECT
COUNT(table1.*) as t1,
COUNT(table2.*) as t2,
COUNT(table3.*) as t3
FROM table1
LEFT JOIN tabel2 ON condition
LEFT JOIN tabel3 ON condition
언급URL : https://stackoverflow.com/questions/3761240/count-from-multiple-tables-in-mysql
'programing' 카테고리의 다른 글
| 변수 유형이 문자열인지 확인하는 방법 (0) | 2022.12.30 |
|---|---|
| ResultSet#getRow()가 1을 반환할 때 "Current position is after the last row"가 반환됩니다. (0) | 2022.12.30 |
| JavaScript에서 yield 키워드는 무엇입니까? (0) | 2022.12.30 |
| 브라우저의 버전을 검출하려면 어떻게 해야 합니까? (0) | 2022.12.30 |
| Vuex 변환이 실행 중이지만 vue dev 도구에서 수동으로 커밋될 때까지 구성 요소가 업데이트되지 않음 (0) | 2022.12.30 |