考虑以下查询:
\n\nSELECT\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;\nRun Code Online (Sandbox Code Playgroud)\n\n它返回类似以下内容:
\n\ncountry count\nfr 3456\nus 569\nsc 248\n\xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n\n如何添加第三列以及占总计数的百分比?
\n我有一个包含约 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 的结果来看,我怀疑这是来自某种排序。有办法避免这种情况吗?不会有那么多的输出行,所以不知何故,我觉得好像应该有一种方法可以在输出处做得更到位......但这是一个非常模糊的直觉。
我是一个 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。
我有一张像下面这样的表
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”的计数。我可能把它复杂化了。但我想要一些简单的东西,我可以在一个日期范围内每天提取交易量。
我有这个查询:
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) 我在前 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) 是否可以在 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) 假设表中有 4 列。
cpt,cpt4mod,itemcharge,eff_date.
Run Code Online (Sandbox Code Playgroud)
条件1:如果值cpt,cpt4和itemcharge是一样的,但是eff_date是不同的。然后我需要根据eff_date.
condtition2:如果值cpt和cpt4是相同的,但eff_date并itemcharge不同。然后我需要根据eff_date.
条件3:如果所有列都具有相同的值,那么我需要根据 eff_date
条件 4:如果 的值cpt,cpt4and,eff_date相同但itemcharge 不同。然后我需要获取除最新记录之外的所有记录
这是 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 …
group-by ×10
sql-server ×5
count ×3
postgresql ×3
cte ×2
aws-aurora ×1
disk-space ×1
join ×1
mysql ×1
mysql-8.0 ×1
oracle-10g ×1
t-sql ×1