쿼리 내부 쿼리에서 "열로" 반환됨
저는 특정 회사별 관리자 수와 함께 모든 회사를 테이블에 나열하는 것을 좋아합니다.
표:
companies
id
name
...
users
id
company_id
...
groups ('id' = 1 has 'name' = admin)
id
name
users_groups
id
user_id
group_id
모든 '기업'을 나열하자면 이렇게 적습니다.
SELECT companies.name
FROM companies
하나의 특정 '회사'에 있는 'admin'의 번호(지정된 ID)를 얻기 위해 다음과 같이 적습니다.
SELECT COUNT (users.id)
FROM users, companies, users_groups WHERE
users.company_id = companies.id AND
users_groups.user_id = users.id AND
users_groups.group_id = 1
그렇다면 이 두 문제를 어떻게 병합할 수 있을까요?실패:
SELECT
companies.name,
(
SELECT COUNT (users.id)
FROM users, companies, users_groups WHERE
users.company_id = companies.id AND
users_groups.user_id = users.id AND
users_groups.group_id = 1
)
as admins_in_company
FROM users, companies, users_groups
명시적 조인 구문 및 카운트 사용(불특정...)):
select c.name, count(distinct u.id)
from companies c
inner join users u
on u.company_id = c.id
inner join users_groups ug
on ug.user_id = u.id
where ug.group_id = 1
group by c.name
모든 회사의 경우:
select c.name, count(distinct u.id)
from companies c
left join users u
on u.company_id = c.id
left join users_groups ug
on ug.user_id = u.id
and ug.group_id = 1
group by c.name
SELECT c.name, COUNT(DISTINCT u.id) AS num_admins
FROM groups AS g
JOIN users_groups AS ug ON ug.group_id = g.id
JOIN users AS u ON u.id = ug.user_id
JOIN companies AS c ON c.id = u.company_id
WHERE g.group_id = 1
AND g.name = 'admin'
GROUP BY u.company_id;
필요하신지 여부가 불분명합니다.COUNT(DISTINCT u.id)
아니면 간단히COUNT(*)
.
4개의 표를 볼 순서대로 나열했습니다. (이는 필수 사항이 아니라 사용자가 읽고 생각하기 쉽게 만든 것입니다.)첫번째는groups
모든 것을 가지고 있는.(
어디에). Then it moves through the other tables all the way to getting the
company.name. Then the
그룹화 기준and its
COUNT(DISTINCT...)'가 적용됩니다.
많은 정보: 많은 스키마(users_groups) 디자인: http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table
groups
-- group_idand
group.nameare in a 1:1 relationship, yes? If you know that it is
group_id = 1, you can get rid of the table
무리completely from the query. If not, then be sure to have
해당 표의 INDEX(name)'.
언급URL : https://stackoverflow.com/questions/41693177/query-inside-query-returned-as-a-column
'programing' 카테고리의 다른 글
Linux 및 Windows에서 모두 실행할 휴대용 라이브러리 만들기 (0) | 2023.10.10 |
---|---|
쿼리 문자열 잘라내기 및 Clean URL C# ASP.net 반환 (0) | 2023.10.10 |
MySQL Workbench - 이름이 다른 동일한 서버에서 데이터베이스를 복제하는 방법? (0) | 2023.10.05 |
네트워크 포트 액세스를 확인하고 유용한 메시지를 표시하는 방법은 무엇입니까? (0) | 2023.10.05 |
Maria에서 업데이트 명령 롤백DB (0) | 2023.10.05 |