그룹없이 세다
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 |