82

2つのフィールドを持つテーブルがあります。

ID名
------------
1アルファ
2ベータ
3ベータ
4ベータ
5チャーリー
6チャーリー

名前、「count」、行「SUM」でグループ化したい

名前カウント
--------------
アルファ1
ベータ3
チャーリー2
SUM 6

テーブルの下にSUM行を追加するクエリを作成するにはどうすればよいですか?

4

17 に答える 17

93
SELECT name, COUNT(name) AS count
FROM table
GROUP BY name

UNION ALL

SELECT 'SUM' name, COUNT(name)
FROM table

出力:

name                                               count
-------------------------------------------------- -----------
alpha                                              1
beta                                               3
Charlie                                            2
SUM                                                6
于 2012-10-17T04:50:56.180 に答える
79
SELECT name, COUNT(name) AS count, SUM(COUNT(name)) OVER() AS total_count
FROM Table GROUP BY name
于 2015-07-15T13:43:52.010 に答える
17

使用しているrdbmsを指定せずに

このデモをご覧ください

SQLフィドルデモ

SELECT Name, COUNT(1) as Cnt
FROM Table1
GROUP BY Name
UNION ALL
SELECT 'SUM' Name, COUNT(1)
FROM Table1

とはいえ、データベースではなく、プレゼンテーション層で合計を追加することをお勧めします。

これは、 ROLLUPを使用したデータの要約を使用したSQLSERVERバージョンのもう少しです。

SQLフィドルデモ

SELECT CASE WHEN (GROUPING(NAME) = 1) THEN 'SUM'
            ELSE ISNULL(NAME, 'UNKNOWN')
       END Name, 
      COUNT(1) as Cnt
FROM Table1
GROUP BY NAME
WITH ROLLUP
于 2012-10-17T04:50:54.513 に答える
10

これを試して:

SELECT  ISNULL(Name,'SUM'), count(*) as Count
FROM table_name
Group By Name
WITH ROLLUP
于 2012-10-17T05:10:35.397 に答える
4

以下のように実行してください:

Select sum(count) 
  from (select Name, 
               count(Name) as Count 
          from YourTable
      group by Name);  -- 6
于 2016-03-21T16:09:34.187 に答える
4

ここでのすべてのソリューションは優れていますが、必ずしも古いmysqlサーバーに実装できるとは限りません(少なくとも私の場合)。したがって、サブクエリを使用できます(それほど複雑ではないと思います)。

 select sum(t1.cnt) from 
        (SELECT column, COUNT(column) as cnt
            FROM
            table 
            GROUP BY 
            column
            HAVING 
            COUNT(column) > 1) as t1 ;
于 2020-02-26T06:17:41.817 に答える
3

私がこの質問を解釈する方法は、回答の各グループの小計値を必要としています。小計は、以下を使用して非常に簡単であることがわかりますPARTITION

SUM(COUNT(0)) OVER (PARTITION BY [Grouping]) AS [MY_TOTAL]

これは私の完全なSQL呼び出しがどのように見えるかです:

SELECT MAX(GroupName) [name], MAX(AUX2)[type],  
COUNT(0) [count], SUM(COUNT(0)) OVER(PARTITION BY GroupId) AS [total]
    FROM [MyView]
  WHERE Active=1 AND Type='APP' AND Completed=1
    AND [Date] BETWEEN '01/01/2014' AND GETDATE()
    AND Id = '5b9xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' AND GroupId IS NOT NULL
  GROUP BY AUX2, GroupId

これから返されるデータは次のようになります。

name    type    count   total
Training Group 2    Cancelation 1   52
Training Group 2    Completed   41  52
Training Group 2    No Show 6   52
Training Group 2    Rescheduled 4   52
Training Group 3    NULL        4   10535
Training Group 3    Cancelation 857 10535
Training Group 3    Completed   7923    10535
Training Group 3    No Show 292 10535
Training Group 3    Rescheduled 1459    10535
Training Group 4    Cancelation 2   27
Training Group 4    Completed   24  27
Training Group 4    Rescheduled 1   27
于 2020-06-08T20:29:42.793 に答える
2

ユニオンを使用して行を結合できます。

select Name, count(*) as Count from yourTable group by Name
union all
select "SUM" as Name, count(*) as Count from yourTable
于 2012-10-17T04:51:55.013 に答える
2

SQLサーバーの場合は、これを試すことができます。

SELECT ISNULL([NAME],'SUM'),Count([NAME]) AS COUNT
FROM TABLENAME
GROUP BY [NAME] WITH CUBE
于 2015-07-15T12:20:16.013 に答える
1
  with cttmp
  as
  (
  select Col_Name, count(*) as ctn from tab_name group by Col_Name having count(Col_Name)>1
  )
  select sum(ctn) from c
于 2016-10-24T06:50:59.583 に答える
1

ROLLUPを使用できます

select nvl(name, 'SUM'), count(*)
from table
group by rollup(name)
于 2016-11-02T17:32:19.290 に答える
0

として使用

select Name, count(Name) as Count from YourTable
group by Name
union 
Select 'SUM' , COUNT(Name) from YourTable
于 2012-10-17T04:58:01.360 に答える
0

名前でgroupbyを試して、そのグループのIDを数えることができます。

SELECT name, count(id) as COUNT FROM table group by name
于 2012-10-17T04:50:05.853 に答える
0

私はSQLサーバーを使用していますが、次のように機能するはずです。

select cast(name as varchar(16))as'Name'、count(name)as'Count' from Table1 group by Name union all select'Sum:'、count(name)from Table1

于 2018-12-14T19:11:16.713 に答える
0

having count(*) > 1も必要でした。それで、私は上記のクエリのいくつかを参照した後、私自身のクエリを書きました

構文:

select sum(count) from (select count(`table_name`.`id`) as `count` from `table_name` where {some condition} group by {some_column} having count(`table_name`.`id`) > 1) as `tmp`;

例:

select sum(count) from (select count(`table_name`.`id`) as `count` from `table_name` where `table_name`.`name` IS NOT NULL and `table_name`.`name` != '' group by `table_name`.`name` having count(`table_name`.`id`) > 1) as `tmp`;
于 2020-01-08T12:34:50.617 に答える
-2

クエリの後、以下を実行して合計行数を取得します

select @@ROWCOUNT
于 2016-01-21T05:04:20.187 に答える
-6

select sum(s)from(select count(Col_name)as s from Tab_name group by Col_name has count(*)> 1)c

于 2016-10-24T07:45:35.017 に答える