나는 사용자가 '총 참여'를 출력해야하는 쿼리를 작업 중입니다. 1 -eng 열은 참여가 1 인 사용자를 표시하고, 두 번째 열은 2 참여를 수행 한 사용자를 표시하는 2-eng과 같은 열에 있습니다. 마찬가지로 3eng 등. 디스플레이는 다음과 같아야합니다. userID가있는 참여 테이블이 있습니다. 그래서 저는 이와 같은 고유 한 사용자를 얻습니다.
select count(distinct userID) from engagements
그리고 나는 약혼을 얻습니다.
select count(*) from engagements
여기에서 참여는 콘텐츠를 좋아요, 응답 또는 공유 한 사용자를 의미합니다.
도와주세요. 감사! CASE 및 IF를 사용했지만 아래 형식으로 표시 할 수 없습니다.
1eng 2eng 3eng
100 200 100
결과를 행으로 반환하고 나중에 애플리케이션에서 피벗하는 것을 고려하십시오.
원하는 결과를 행으로 반환하려면 다음 쿼리를 사용할 수 있습니다.
SELECT
engagementCount,
COUNT(*) AS userCount
FROM (
SELECT
userID,
COUNT(*) AS engagementCount
FROM engagements
GROUP BY userID
) AS s
GROUP BY engagementCount
;
기본적으로, 첫 번째 그룹 engagements
에 의해 행 userID
과 당 행 수를 얻을 userID
. 그 후에 카운트를 그룹화 기준으로 사용하고 해당 카운트로 발견 된 사용자 수를 계산합니다.
SQL에서 열 뷰를 반환해야하는 경우 최종 결과 집합의 열 수가 무한하기 때문에 동적 SQL에 의존해야합니다. 내부 SELECT의 결과를 임시로 저장하고이를 스캔하여 모든 engagementCount
값에 대한 개수 식 목록을 작성 하고 궁극적으로 이러한 종류의 쿼리를 구성해야 할 수 있습니다.
SELECT
COUNT(engagementCount = 1 OR NULL) AS `1eng`,
COUNT(engagementCount = 2 OR NULL) AS `2eng`,
COUNT(engagementCount = 3 OR NULL) AS `3eng`,
...
FROM temporary_storage
;
또는 대신 . (나에게 후자는 의도를 더 명확하게 표현하기 때문에 내가 먼저 제안한 이유이지만,이 기술 을 선호하는 경우 둘 사이에 눈에 띄는 성능 차이가 없어야합니다. 트릭은 여기 에 설명되어 있습니다 . )SUM(engagementCount = value)
COUNT(engagementCount = value OR NULL)
SUM
OR NULL
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다