programing

단일 쿼리의 여러 선택 문

goodsources 2023. 2. 2. 21:15
반응형

단일 쿼리의 여러 선택 문

php(mysql)로 보고서를 생성하고 있습니다.

예:

`select count(id) as tot_user from user_table
 select count(id) as tot_cat from cat_table
 select count(id) as tot_course from course_table`

이렇게 12개의 테이블이 있어요.

한 번에 만들 수 있나요?내가 그랬다면?프로세스가 느리다?

SELECT  (
    SELECT COUNT(*)
    FROM   user_table
) AS tot_user,
(
    SELECT COUNT(*)
    FROM   cat_table
) AS tot_cat,
(
    SELECT COUNT(*)
    FROM   course_table
) AS tot_course

MyISAM 테이블을 사용하는 경우 가장 빠른 방법은 통계정보를 직접 조회하는 것입니다.

select table_name, table_rows 
     from information_schema.tables 
where 
     table_schema='databasename' and 
     table_name in ('user_table','cat_table','course_table')

InnoDB가 있는 경우 information_schema.tables의 보고된 값이 잘못되었기 때문에 count()로 쿼리해야 합니다.

Select Agregation 스테이트먼트는 반드시 Postulated by Ben James로 할 수 있습니다.그러나 이렇게 하면 테이블 수만큼 열이 표시됩니다.대체 방법은 다음과 같습니다.

SELECT COUNT(user_table.id) AS TableCount,'user_table' AS TableSource FROM user_table
UNION SELECT COUNT(cat_table.id) AS TableCount,'cat_table' AS TableSource FROM cat_table
UNION SELECT COUNT(course_table.id) AS TableCount, 'course_table' AS TableSource From course_table;

이러한 접근법의 장점은 Union 문을 명시적으로 작성하고 뷰를 생성하거나 임시 테이블을 생성하여 Proc cal에서 테이블 이름 대신 변수를 사용하여 연속적으로 추가된 값을 유지할 수 있다는 것입니다.나는 후자를 더 선호하는 경향이 있지만, 그것은 정말로 개인의 취향과 용도에 달려 있다.테이블이 변경되지 않을 경우 단일 행 형식으로 데이터를 사용하고 테이블을 추가하지 않습니다.벤 제임스의 솔루션을 고수할 수 있습니다.그렇지 않으면 언제든지 크로스탭 스트럭을 해킹할 수 있습니다.

select RTRIM(A.FIELD) from SCHEMA.TABLE A where RTRIM(A.FIELD) =  ('10544175A') 
 UNION  
select RTRIM(A.FIELD) from SCHEMA.TABLE A where RTRIM(A.FIELD) = ('10328189B') 
 UNION  
select RTRIM(A.FIELD) from SCHEMA.TABLE A where RTRIM(A.FIELD) = ('103498732H')
SELECT t1.credit, 
       t2.debit 
FROM   (SELECT Sum(c.total_amount) AS credit 
        FROM   credit c 
        WHERE  c.status = "a") AS t1, 
       (SELECT Sum(d.total_amount) AS debit 
        FROM   debit d 
        WHERE  d.status = "a") AS t2 

오래된 스택인 것은 알지만 이 Multi-SQL 선택 사례를 게시합니다.

    SELECT bp.bizid, bp.usrid, bp.website, 
ROUND((SELECT SUM(rating) FROM ratings WHERE bizid=bp.bizid)/(SELECT COUNT(*) FROM ratings WHERE bizid=bp.bizid), 1) AS 'ratings', 
(SELECT COUNT(*) FROM bzreviews WHERE bizid=bp.bizid) AS 'ttlreviews', 
bp.phoneno, als.bizname, 
(SELECT COUNT(*) FROM endorsment WHERE bizid=bp.bizid) AS 'endorses'
, als.imgname, bp.`location`, bp.`ownership`, 
(SELECT COUNT(*) FROM follows WHERE bizid=bp.bizid) AS 'followers', 
bp.categories, bp.openhours, bp.bizdecri FROM bizprofile AS bp 
INNER JOIN alluser AS als ON bp.usrid=als.userid 
WHERE als.usertype='Business'

언급URL : https://stackoverflow.com/questions/1775168/multiple-select-statements-in-single-query

반응형