标签: group-by

使用 GROUP BY 计算列的百分比

考虑以下查询:

\n\n
SELECT\n  country\n  , count(id) AS "count"\nFROM\n  lead\nWHERE\n  date_part(\'year\', lead.since) = date_part(\'year\', CURRENT_DATE)\nGROUP BY "country"\nORDER BY "count" DESC\n;\n
Run Code Online (Sandbox Code Playgroud)\n\n

它返回类似以下内容:

\n\n
country count\nfr  3456\nus  569\nsc  248\n\xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何添加第三列以及占总计数的百分比?

\n

postgresql cte count window-functions group-by

2
推荐指数
1
解决办法
1491
查看次数

从 GROUP BY 创建表会使用大量临时磁盘空间 - 可以避免吗?

我有一个包含约 20 亿行数据的表,我想创建另一个包含一些聚合的表。看起来 PostgreSQL 使用临时磁盘空间来执行这些查询。我可以创建表...

CREATE TABLE my_new_table ...
Run Code Online (Sandbox Code Playgroud)

但是当我插入数据时:

INSERT INTO my_new_table SELECT
   col_1,
   col_2,
   col_3,
   col_4,
   col_5,
   col_6,
   col_7,
   col_8,
   col_9,
   sum(col_10),
   sum(col_11)
FROM
   my_table
GROUP BY
   1,2,3,4,5,6,7,8,9
Run Code Online (Sandbox Code Playgroud)

PostgreSQL 似乎使用临时文件来存储结果,并且空间不足,例如出现如下错误:

无法写入文件“base/pgsql_tmp/pgsql_tmp31757.25”:设备上没有剩余空间

从 EXPLAIN 的结果来看,我怀疑这是来自某种排序。有办法避免这种情况吗?不会有那么多的输出行,所以不知何故,我觉得好像应该有一种方法可以在输出处做得更到位......但这是一个非常模糊的直觉。

postgresql disk-space group-by postgresql-10 aws-aurora

2
推荐指数
1
解决办法
329
查看次数

GROUP BY 子句中的条件选择

我是一个 SQL 初学者,遇到了以下问题。考虑一个包含国家、该国家内的城市及其人口数据的表格:

CREATE TABLE cities (
    country VARCHAR(20),
    city VARCHAR(20),
    population INT
);

INSERT INTO cities VALUES
   ('Italy', 'Milano', 1000000), 
   ('Italy', 'Rome', 2000000), 
   ('Italy', 'Bologna', 800000), 
   ('Poland', 'Warszawa', 1000000), 
   ('Poland', 'Wroclaw', 700000);
Run Code Online (Sandbox Code Playgroud)

我想编写一个查询,返回国家/地区名称及其最大城市的人口和城市名称本身。前两个字段使用 很简单GROUP BY。但是,我不知道如何包含最大城市的名称。我试过:

SELECT 
    country, MAX(population), city
FROM
    cities
WHERE
    population = (SELECT 
            MAX(population)
        FROM
            cities
        )
GROUP BY country, city;
Run Code Online (Sandbox Code Playgroud)

但这只选择了一项记录(有关罗马的记录)。我希望查询为每个国家/地区组返回一条记录,即本例中为罗马和华沙。条件WHERE不能是:

population = (SELECT 
            MAX(population)
        FROM
            cities
        GROUP BY country)
Run Code Online (Sandbox Code Playgroud)

因为这样子查询返回两行,导致主查询中出现错误1242。

mysql group-by greatest-n-per-group mysql-8.0

2
推荐指数
1
解决办法
589
查看次数

需要在 Oracle 上按日期计算记录和分组计数

我有一张像下面这样的表

   ID                created    sent    type
-----------------------------------------------------
0001463583000051783  31-JUL-12  1   270
0081289563000051788  01-AUG-12  1   270
0081289563000051792  01-AUG-12  1   270
0081289563000051791  01-AUG-12  1   270
0081289563000051806  01-AUG-12  1   270
0001421999000051824  06-AUG-12  1   270
0001421999000051826  06-AUG-12  1   270
0001464485000051828  06-AUG-12  1   270
0082162128000051862  09-AUG-12  2   278
0082162128000051861  09-AUG-12  2   278
0022409222082910259  09-AUG-12  3   278
Run Code Online (Sandbox Code Playgroud)

我想有以下输出

created     Count
---------------------
31-JUL-12   1
01-AUG-12   4
06-AUG-12   3
09-AUG-12   3
Run Code Online (Sandbox Code Playgroud)

在 Oracle 10g 上使用 SQL Developer 实现这一目标有多难?

我尝试了几个查询来生成这样一个表,最后它没有按日期对计数进行分组,当我们每天平均 5000-10000 笔交易时,它只是给我一个“1”的计数。我可能把它复杂化了。但我想要一些简单的东西,我可以在一个日期范围内每天提取交易量。

oracle-10g count oracle-sql-developer group-by

1
推荐指数
1
解决办法
5万
查看次数

每周每列计数 PostgreSQL

假设我有一个包含 10 列和 2 周 (w1 w2) 的 PostgreSQL 表,其中包含 5 个国家/地区。看起来像这样的东西:

数据

我想做的是每周和每列的计数,如下所示:

结果

postgresql count group-by

1
推荐指数
1
解决办法
1178
查看次数

如何在组查询中返回零值

我有这个查询:

    SELECT fksiteID, SUM(SearchTypePerson) + 
       SUM(SearchTypeLocker) + 
       SUM(SearchTypeSpotRandom) + 
       SUM(SearchTypePersVehicle) + 
       SUM(SearchTypeVisitorContractorVehicle) + 
       SUM(SearchTypeCompanyVehicle) + 
       SUM(SearchTypeToilet) + 
       SUM(PatrolExternal) + 
       SUM(PatrolCarPark) + 
       SUM(PatrolPerimeter) + 
       SUM(PatrolInternal) + 
       SUM(VehicleCheckAmbientLine) + 
       SUM(VehicleCheckFridgeLine) + 
       SUM(VehicleCheckSealChecks) + 
       SUM(OtherChecksIDCards) + 
       SUM(OtherChecksIncidentReports) + 
       SUM(OtherChecksColdStoreChecks) AS NumChecks
  FROM [AIP].[dbo].[AAHOfficerDailyActivityReport]
  WHERE MonthOfReport = 6 AND RecordIsDeletedYN = 0 AND fkSiteID in (945,947,948,949,950,951,952)
  GROUP BY fkSiteID
Run Code Online (Sandbox Code Playgroud)

这给出了这个结果:

fksiteID    NumChecks
945         228
947         27
949         58
951         67
952         1015
Run Code Online (Sandbox Code Playgroud)

但是我希望它返回:

fksiteID    NumChecks
945         228
947         27
948         0
949         58
950 …
Run Code Online (Sandbox Code Playgroud)

sql-server group-by

1
推荐指数
1
解决办法
149
查看次数

在 6 个月范围内对库存进行分组

我在前 6 个月内一直在拉动总库存。如何在同一查询中提取过去 6 个月内的总库存?

另外我想要查询的结果如下所示:

  Stock Code | the first 6 months   |  the second 6 months   etc.
Run Code Online (Sandbox Code Playgroud)

我的 SQL 查询:

 SELECT TOP (100) PERCENT STOK_KODU, 
    COALESCE (SUM(CASE WHEN kod1 = 'G' THEN kod2 ELSE 0 END), 0) 
   - COALESCE (SUM(CASE WHEN kod1 = 'C' THEN kod2 ELSE 0 END), 0) AS StokToplam1 
FROM s_hareket WHERE (STOK_KODU BETWEEN '01001' AND '75000') 
and (tarih BETWEEN '2011-01-01' and '2011-06-30') 
GROUP BY STOK_KODU 
ORDER BY STOK_KODU
Run Code Online (Sandbox Code Playgroud)

sql-server group-by

0
推荐指数
1
解决办法
197
查看次数

使用 CASE 按多列分组时出错

是否可以在 CASE 语句中按多个列进行分组?我收到错误“',' 附近的语法不正确。” 在下面的代码...

SELECT
  CASE 
     WHEN Type = 'Test'
       THEN Description
     ELSE MAX([Description])                
  END AS 'Description'
GROUP BY
CASE
    WHEN Type = 'Test'
        THEN Description
    ELSE ''
END,
Type, Account, Structure    
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql group-by

0
推荐指数
1
解决办法
4197
查看次数

从列值应该不同的表中选择值

假设表中有 4 列。

cpt,cpt4mod,itemcharge,eff_date.
Run Code Online (Sandbox Code Playgroud)

条件1:如果值cpt,cpt4itemcharge是一样的,但是eff_date是不同的。然后我需要根据eff_date.

condtition2:如果值cptcpt4是相同的,但eff_dateitemcharge不同。然后我需要根据eff_date.

条件3:如果所有列都具有相同的值,那么我需要根据 eff_date

条件 4:如果 的值cpt,cpt4and,eff_date相同但itemcharge 不同。然后我需要获取除最新记录之外的所有记录

join sql-server group-by

0
推荐指数
1
解决办法
504
查看次数

按功能分组在 SQL Server CTE 中无法正常工作

这是 SQL Server CTE,

;with grp (Sdate,TransactionType,tot)
as

(select cast(CallStartTime as DATE)Date, Transaction_type as [Transaction type], 
    (count ([Transaction_type])) as [Total Count] 
    from TBL_AGENT_TRANSACTIONS 
    where cast(CallStartTime as DATE)>='2015-04-27' and cast(CallEndTime as Date)<='2015-04-27'  and Transaction_type in ('Debit_Card')
    group by CallStartTime, Transaction_type)

select grp.Sdate,grp.TransactionType,sum(grp.tot) as totalCount from grp group by TransactionType,grp.Sdate,grp.tot
Run Code Online (Sandbox Code Playgroud)

这里我想根据 Sdate 和 Transaction Type 对 totalcount 进行分组。但它不能正常工作。我有 3 条具有相同 Sdate、Transaction Type 的记录,我需要将 totalcount 显示为 3 作为一行。但我得到如下两行。

在此处输入图片说明

任何人都可以帮我解决这个小问题吗?

更新:

我得到了确切的问题,

在我的表“ TBL_AGENT_TRANSACTIONS ”中,列“ Transaction_type ”的数据类型是 varchar 但我需要根据 Sdate 和 Transaction_type 找到该 Transaction_type …

sql-server cte group-by

0
推荐指数
1
解决办法
9988
查看次数