그룹없이 세다
GUYS(ID, NAME, PONE)라는 이름의 테이블이 하나 있는데, 같은 이름을 가진 남자가 몇 명인지 세어보고 동시에 모두 보여줘야 합니다.그래서 난 그들을 모을 수가 없어요.
예:
ID NAME PHONE
1 John 335
2 Harry 444
3 James 367
4 John 742
5 John 654
원하는 출력은 다음과 같습니다.
ID NAME PHONE COUNT
1 John 335 3
2 Harry 444 1
3 James 367 1
4 John 742 3
5 John 654 3
내가 어떻게 그럴 수 있을까?다른 숫자를 가진 많은 남자들만 겨우 구할 수 있었습니다.
감사해요.
8.0+용 업데이트: 이 답변은 Oracle의 기존 구문과 대부분 동일한 구문을 가진 윈도우 기능을 도입한 MySQL 버전 8보다 훨씬 이전에 작성되었습니다.
이 새로운 구문에서 해결책은
SELECT
t.name,
t.phone,
COUNT('x') OVER (PARTITION BY t.name) AS namecounter
FROM
Guys t
아래의 답변은 최신 버전에서도 여전히 작동하며, 이 경우에도 마찬가지로 간단하지만 상황에 따라 이러한 창 기능을 사용하기가 훨씬 쉽습니다.
이전 버전: 버전 8까지는 MySQL에 Oracle과 같은 분석 기능이 없었기 때문에 하위 쿼리를 사용해야 했습니다.
사용하지않습니다.GROUP BY
, 하위 선택 항목을 사용하여 동일한 이름을 가진 남자의 수를 계산합니다.
SELECT
t.name,
t.phone,
(SELECT COUNT('x') FROM Guys ct
WHERE ct.name = t.name) as namecounter
FROM
Guys t
모든 행에 대해 하위 선택 항목을 실행하는 것이 느리다고 생각하겠지만 적절한 인덱스가 있으면 MySQL이 이 쿼리를 최적화하고 잘 실행된다는 것을 알 수 있습니다.
이 예제에서는 다음에 대한 인덱스를 사용해야 합니다.Guys.name
. 에 여러 열이 있는 경우where
하위 쿼리의 조항, 쿼리는 모든 열에 대한 단일 결합 인덱스를 통해 이점을 얻을 수 있습니다.
집계 쿼리 사용:
select g.ID, g.Name, g.Phone, count(*) over ( partition by g.name ) as Count
from
Guys g;
여전히 A를 사용할 수 있습니다.GROUP BY
카운트를 위해, 당신은 단지JOIN
모든 기록을 원래 테이블로 가져오려면 다음과 같이 해야 합니다.
select g.ID, g.Name, g.Phone, gc.Count
from Guys g
inner join (
select Name, count(*) as Count
from Guys
group by Name
) gc on g.Name = gc.Name
Oracle DB에서 사용할 수 있는
SELECT ID,NAME,PHONE,(Select COUNT(ID)From GUYS GROUP BY Name) FROM GUYS ;
DECLARE @tbl table
(ID int,NAME varchar(20), PHONE int)
insert into @tbl
select
1 ,'John', 335
union all
select
2 ,'Harry', 444
union all
select
3 ,'James', 367
union all
select
4 ,'John', 742
union all
select
5 ,'John', 654
SELECT
ID
, Name
, Phone
, count(*) over(partition by Name)
FROM @tbl
ORDER BY ID
select id, name, phone,(select count(name) from users u1 where u1.name=u2.name) count from users u2
해라
열 1을 선택하고 () 위에 카운트(1)를 계산합니다.
도움이 될 것입니다
언급URL : https://stackoverflow.com/questions/4259611/count-without-group
'programing' 카테고리의 다른 글
12시간 hh:mm AM/PM을 24시간 hh:mm로 변환 (0) | 2023.09.18 |
---|---|
Angularjs $http가 응답에서 "Set-Cookie"를 이해하지 못하는 것 같습니다. (0) | 2023.09.18 |
mysql 대비 neo4j 성능 (어떻게 개선할 수 있습니까?) (0) | 2023.09.18 |
하나의 선택기로 모든 태그를 대상으로 할 수 있습니까? (0) | 2023.09.18 |
오류: 'unary *'의 잘못된 형식 인수('int'가 있음) (0) | 2023.09.18 |