복붙노트

[SQL] 같은 select 문에 의해 수와 그룹을 사용하는 방법

SQL

같은 select 문에 의해 수와 그룹을 사용하는 방법

나는에 의해 그룹이있는 SQL 선택 쿼리가 있습니다. 나는 문에 의해 그룹 후 모든 레코드를 계산합니다. 이 직접 SQL에서 수있는 방법이 있습니까? 예를 들어, 사용자와 테이블을 가진 나는 다른 도시와 사용자의 총 수를 선택합니다

select town, count(*) from user
group by town

나는 모든 행의 사용자 수와 모든 도시와 열 및 다른 갖고 싶어.

합계가 3 개 도시와 58을 갖는 사용자에 대한 결과의 예 :

Town         Count
Copenhagen   58
NewYork      58
Athens       58

해결법

  1. ==============================

    1.이것은 당신이 (각각의 사용자 수와 함께, 마을의 목록을) 원하는 것을 할 것입니다 :

    이것은 당신이 (각각의 사용자 수와 함께, 마을의 목록을) 원하는 것을 할 것입니다 :

    select town, count(town) 
    from user
    group by town
    

    그룹 BY를 사용할 때 대부분의 집계 함수를 사용할 수 있습니다.

    업데이트 (질문과 의견에 변화를 다음)

    당신은 사용자 수에 대한 변수를 선언하고 그와 함께 선택 사용자의 수를 설정할 수 있습니다.

    DECLARE @numOfUsers INT
    SET @numOfUsers = SELECT COUNT(*) FROM user
    
    SELECT DISTINCT town, @numOfUsers
    FROM user
    
  2. ==============================

    2.당신은 (... DISTINCT) COUNT 사용할 수 있습니다 :

    당신은 (... DISTINCT) COUNT 사용할 수 있습니다 :

    SELECT COUNT(DISTINCT town) 
    FROM user
    
  3. ==============================

    3.다른 방법은 다음과 같습니다

    다른 방법은 다음과 같습니다

    /* Number of rows in a derived table called d1. */
    select count(*) from
    (
      /* Number of times each town appears in user. */
      select town, count(*)
      from user
      group by town
    ) d1
    
  4. ==============================

    4.당신이 계산에 의해 주문하려는 경우 당신이 할 수있는 (사운드 간단하지만 난 그 작업을 수행하는 방법의 스택에 답을 발견은`t) :

    당신이 계산에 의해 주문하려는 경우 당신이 할 수있는 (사운드 간단하지만 난 그 작업을 수행하는 방법의 스택에 답을 발견은`t) :

            SELECT town, count(town) as total FROM user
            GROUP BY town ORDER BY total DESC
    
  5. ==============================

    5.오라클 사용하면 분석 기능을 사용할 수 있습니다 :

    오라클 사용하면 분석 기능을 사용할 수 있습니다 :

    select town, count(town), sum(count(town)) over () total_count from user
    group by town
    

    다른 옵션은 하위 쿼리를 사용하는 것입니다 :

    select town, count(town), (select count(town) from user) as total_count from user
    group by town
    
  6. ==============================

    6.텐 삭제되지 않은 답변; 대부분의 사용자가 무엇을 요구하지 않습니다. 대부분의 답변의 58 각 마을에있는 사용자 대신 총 (58)이 있다는 생각으로 질문을 잘못은 읽기. 심지어 올바른지 그 몇 최적되지 않습니다.

    텐 삭제되지 않은 답변; 대부분의 사용자가 무엇을 요구하지 않습니다. 대부분의 답변의 58 각 마을에있는 사용자 대신 총 (58)이 있다는 생각으로 질문을 잘못은 읽기. 심지어 올바른지 그 몇 최적되지 않습니다.

    mysql> flush status;
    Query OK, 0 rows affected (0.00 sec)
    
    SELECT  province, total_cities
        FROM       ( SELECT  DISTINCT province  FROM  canada ) AS provinces
        CROSS JOIN ( SELECT  COUNT(*) total_cities  FROM  canada ) AS tot;
    +---------------------------+--------------+
    | province                  | total_cities |
    +---------------------------+--------------+
    | Alberta                   |         5484 |
    | British Columbia          |         5484 |
    | Manitoba                  |         5484 |
    | New Brunswick             |         5484 |
    | Newfoundland and Labrador |         5484 |
    | Northwest Territories     |         5484 |
    | Nova Scotia               |         5484 |
    | Nunavut                   |         5484 |
    | Ontario                   |         5484 |
    | Prince Edward Island      |         5484 |
    | Quebec                    |         5484 |
    | Saskatchewan              |         5484 |
    | Yukon                     |         5484 |
    +---------------------------+--------------+
    13 rows in set (0.01 sec)
    

    SHOW 세션 상태 LIKE '핸들러 %';

    +----------------------------+-------+
    | Variable_name              | Value |
    +----------------------------+-------+
    | Handler_commit             | 1     |
    | Handler_delete             | 0     |
    | Handler_discover           | 0     |
    | Handler_external_lock      | 4     |
    | Handler_mrr_init           | 0     |
    | Handler_prepare            | 0     |
    | Handler_read_first         | 3     |
    | Handler_read_key           | 16    |
    | Handler_read_last          | 1     |
    | Handler_read_next          | 5484  |  -- One table scan to get COUNT(*)
    | Handler_read_prev          | 0     |
    | Handler_read_rnd           | 0     |
    | Handler_read_rnd_next      | 15    |
    | Handler_rollback           | 0     |
    | Handler_savepoint          | 0     |
    | Handler_savepoint_rollback | 0     |
    | Handler_update             | 0     |
    | Handler_write              | 14    |  -- leapfrog through index to find provinces  
    +----------------------------+-------+
    

    영업의 맥락에서 :

    SELECT  town, total_users
        FROM       ( SELECT  DISTINCT town  FROM  canada ) AS towns
        CROSS JOIN ( SELECT  COUNT(*) total_users  FROM  canada ) AS tot;
    

    어린 아이에서 한 행이 있기 때문에, 십자가는 가입 달리 수 있습니다로 볼륨 감으로하지 않습니다.

    일반적인 패턴은 COUNT (*) 대신 COUNT (마을)입니다. 후자는 이러한 맥락에서 필요하지 널 (null), 되 고 도시를 확인하는 것을 의미한다.

  7. ==============================

    7.당신은 milkovsky 말한 것처럼 COUNT 내부 DISTINCT 사용할 수 있습니다

    당신은 milkovsky 말한 것처럼 COUNT 내부 DISTINCT 사용할 수 있습니다

    나의 경우에는:

    select COUNT(distinct user_id) from answers_votes where answer_id in (694,695);
    

    이 대답의 수를 끌어 것은 하나의 계수와 같은 USER_ID 고려 투표

  8. ==============================

    8.나는이 SQL Server의 이전 게시물, 알고 :

    나는이 SQL Server의 이전 게시물, 알고 :

    select  isnull(town,'TOTAL') Town, count(*) cnt
    from    user
    group by town WITH ROLLUP
    
    Town         cnt
    Copenhagen   58
    NewYork      58
    Athens       58
    TOTAL        174
    
  9. ==============================

    9.당신이 마을과 총 사용자 수를 선택하려면 다음이 쿼리를 사용할 수 있습니다 :

    당신이 마을과 총 사용자 수를 선택하려면 다음이 쿼리를 사용할 수 있습니다 :

    SELECT Town, (SELECT Count(*) FROM User) `Count` FROM user GROUP BY Town;
    
  10. ==============================

    10.당신은 카운트 옵션과 함께 모두 선택 쿼리를 사용하려면,이 시도 ...

    당신은 카운트 옵션과 함께 모두 선택 쿼리를 사용하려면,이 시도 ...

     select a.*, (Select count(b.name) from table_name as b where Condition) as totCount from table_name  as a where where Condition
    
  11. ==============================

    11.다음 코드를 사용해보십시오 :

    다음 코드를 사용해보십시오 :

    select ccode, count(empno) 
    from company_details 
    group by ccode;
    
  12. from https://stackoverflow.com/questions/2722408/how-to-use-count-and-group-by-at-the-same-select-statement by cc-by-sa and MIT license