例如,带有一个列字母的表测试,
letter
-------
A
B
A
A
B
A
B
Run Code Online (Sandbox Code Playgroud)
我能想到这种方式
SELECT count(letter) FROM test WHERE letter = 'A';
SELECT count(letter) FROM test WHERE letter = 'B';
Run Code Online (Sandbox Code Playgroud)
但是在上面的查询中,我需要2个select语句,我必须指定要计算的值.是否可以在一个查询中执行此操作而不指定任何值?
我试图在SQL Server 2008的View中运行总计
这是我的桌子
BankAccounts ------------ AccountID (KEY) Name Created Transactions ------------ TransactionID (KEY) Description Credit Debit TransDate Created AccountID
这是我到目前为止的查询..
SELECT t.Created, t.Description, t.Credit, t.Debit, t.TransDate, t.TransactionID, ba.AccountID,
(isnull(t.Credit,0)-isnull(t.Debit,0))+COALESCE((SELECT SUM(isnull(Credit,0)) - SUM(isnull(Debit,0))
FROM Transactions b
WHERE b.TransDate < t.TransDate
and b.AccountID = t.AccountID),0)
AS RunningTotal
FROM Transactions t
INNER JOIN dbo.BankAccounts ba ON t.AccountID = ba.AccountID
我得到的是......
TransDate Credit Debit RunningTotal ----------------------- ---------------------- ---------------------- --------------------- 2011-10-08 20:14:00 NULL 12 49.25 2011-10-08 20:14:00 2.11 NULL 63.36 2011-10-07 20:14:00 42.25 NULL …
我将举两个例子,第一个有效,第二个有我想做的事:
SELECT P.ProjName, D.update_date, SUM(E.pass), SUM(E.fail)
FROM execution AS E INNER JOIN (
daily AS D INNER JOIN project AS P ON D.project_ID = P.ID )
ON E.daily_ID = D.ID
WHERE D.project_id = 25 AND D.update_date = (
SELECT MAX(update_date) FROM daily WHERE project_id = 25; )
GROUP BY P.ProjName, D.update_date;
Run Code Online (Sandbox Code Playgroud)
这适用于个别项目.它给出了给定项目最近一天的通过和失败总数(此处为25).我想使用WHERE IN子句获取一组项目.例如(但不起作用):
SELECT P.ProjName, D.update_date, SUM(E.pass), SUM(E.fail)
FROM execution AS E INNER JOIN (
daily AS D INNER JOIN project AS P ON D.project_ID = P.ID )
ON E.daily_ID …Run Code Online (Sandbox Code Playgroud) 我有三张桌子:
CREATE TABLE foo (
id bigint PRIMARY KEY,
name text NOT NULL
);
CREATE TABLE foo_bar (
id bigint PRIMARY KEY,
foo_id bigint NOT NULL
);
CREATE TABLE tag (
name text NOT NULL,
target_id bigint NOT NULL,
PRIMARY KEY (name, target_id)
);
Run Code Online (Sandbox Code Playgroud)
我试图创建一个视图,使得我得到的所有表的字段foo,项目的数量foo_bar,其中foo.id = foo_bar.foo_id,所有的标签,其中的文字阵列foo.id = tag.target_id.如果我们有:
INSERT INTO foo VALUES (1, 'one');
INSERT INTO foo VALUES (2, 'two');
INSERT INTO foo_bar VALUES (1, 1);
INSERT INTO foo_bar VALUES (2, …Run Code Online (Sandbox Code Playgroud) 我有一个毫秒级的时间序列列表,我想重新采样时间序列并在组上应用均值.我怎样才能在Postgres中实现它?
"重新采样"是指在一秒或一分钟内聚合所有时间戳.一秒或一分钟内的所有行组成一个组.
表结构
date x y z
Run Code Online (Sandbox Code Playgroud) 前几天,我给了这个问题一个答案,但随后其他用户使用sum + case条件语句解决了该问题,并在结果中添加了一个边缘条件。所以,我想到了一个问题,sum(case when jobname = 'Analyst' then 1 else 0 end)以下查询中的语句如何工作
select d.*
from (select deptno,
sum(case when jobname = 'Analyst' then 1 else 0 end) as numAnalysts
from employees
group by deptno
order by numAnalysts asc
) d
where rownum = 1;`
Run Code Online (Sandbox Code Playgroud)
并返回部门中的员工人数。另外,我想了解此查询的性能。
我已经找到了我要在Oracle和SQL Server上解决的问题的解决方案(我认为),但是似乎无法将其转换为Postgres解决方案。我正在使用Postgres 9.3.6。
这个想法是为了生成用于分析目的的有关表内容的“元数据”。这只能通过让每一列都运行查询来找出(例如...)最小/最大/计数值等来完成(AFAIK)。为了使过程自动化,最好让数据库生成查询,然后执行查询。
使用示例salesdata表,我可以使用以下代码段为每列生成一个选择查询,并返回min()值:
SELECT 'SELECT min('||column_name||') as minval_'||column_name||' from salesdata '
FROM information_schema.columns
WHERE table_name = 'salesdata'
Run Code Online (Sandbox Code Playgroud)
优点是,无论列数如何,数据库都会生成代码。现在,我想到了无数个地方来存储这些查询,这些查询可以是某种变量,也可以是表列,其想法是执行这些查询。我想将生成的查询存储在变量中,然后使用EXECUTE(或EXECUTE IMMEDIATE)语句执行它们,这是此处采用的方法(请参见右窗格),但是Postgres不会让我在函数外部声明变量,因此我一直在抓挠我对如何将它们组合在一起,无论是什至是遵循的方向,也许还有更简单的东西。
您有任何指点吗,由于其他问题,我目前正在尝试类似的方法,但不知道我是否朝着正确的方向前进:
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS
$$
DECLARE
dyn_sql text;
BEGIN
dyn_sql := SELECT 'SELECT min('||column_name||') from salesdata'
FROM information_schema.columns
WHERE table_name = 'salesdata';
execute dyn_sql
END
$$ LANGUAGE PLPGSQL;
Run Code Online (Sandbox Code Playgroud) postgresql dynamic-sql plpgsql aggregate-functions dynamic-queries
我有一个表格列表(金额,年和月),我想过滤与完整年份相对应的行.即我想省略下面给出的示例数据帧的最后4行,参考2015,并获得其余的60.是否可以使用单个dplyr命令执行此操作?
我试过这个:
df %>%
group_by(year) %>%
tally() %>%
filter (n==12) %>%
ungroup()
Run Code Online (Sandbox Code Playgroud)
但我想ungroup会做出与我想要的不同的事情.是否可以使用单个dplyr命令执行此操作?
df <- structure(list(amount = c(16365, 31850, 32230, 34177.75, 27900,
29650, 28846, 27300, 37115.31, 34130.38, 39676.1, 47244.44, 3500,
25425.48, 22628.43, 30822.86, 30100, 41567.13, 25400, 23125,
40073.75, 16505.82, 17770, 38406.03, 1528.25, 23475.77, 29869.69,
17020, 19270, 13085.47, 10607.48, 7800, 15220, 15260, 17580,
25094.66, 3908.74, 8150, 25055.89, 19690.65, 12445.4, 10347.39,
7645.39, 49300, 8690, 13660, 16510, 34457.08, 522.68, 10202,
18900, 25027.1, 24956.42, 23259, 32743, 37226, 32697, 32258,
31336.67, 36135.81, 4389.26, 12450, 46220.43, …Run Code Online (Sandbox Code Playgroud) 我有名字,工资和员工部门的数据库.我需要一个查询来获得每个部门薪水最高的员工.
数据库:
create table test(
employee_name VARCHAR(255),
department VARCHAR(255),
salary INT
);
Run Code Online (Sandbox Code Playgroud)
数据:
INSERT INTO test(employee_name, department, salary) VALUES
("John", "DepartmentA", 1500),
("Sarah","DepartmentA", 1600),
("Romel","DepartmentA", 1400),
("Victoria","DepartmentB", 1400),
("Maria", "DepartmentB", 1600);
Run Code Online (Sandbox Code Playgroud)
我的尝试:
1.1 WHERE MAX(薪水)=工资GROUP BY部门
SELECT employee_name, salary FROM test WHERE MAX(salary) = salary GROUP BY department;
ERROR 1111 (HY000): Invalid use of group function
Run Code Online (Sandbox Code Playgroud)
1.2.当我用硬编码值替换MAX(薪水)时,它按预期工作:
SELECT employee_name, salary FROM test WHERE 1600 = salary GROUP BY department;
+---------------+--------+
| employee_name | salary |
+---------------+--------+
| Sarah | 1600 …Run Code Online (Sandbox Code Playgroud) 我需要从数据库返回最短和最长的城市名称及其各自的长度.我也欢迎对此查询进行改进,以使其更加优雅.
到目前为止,我有一个示例数据库和查询:http: //sqlfiddle.com/#!9/3b4a7c/1/0
SELECT DISTINCT City, LENGTH(City) as len
FROM STATION
WHERE LENGTH(City)=(SELECT MIN(LENGTH(City)) FROM STATION)
OR LENGTH(City)=(SELECT MAX(LENGTH(City)) FROM STATION)
ORDER BY len
Run Code Online (Sandbox Code Playgroud)
Dole 4
Reus 4
Sant'Egidio del Monte Albino 28
Run Code Online (Sandbox Code Playgroud)
Dole 4
Sant'Egidio del Monte Albino 28
Run Code Online (Sandbox Code Playgroud) sql ×6
postgresql ×3
mysql ×2
conditional ×1
cross-join ×1
dplyr ×1
dynamic-sql ×1
filter ×1
group-by ×1
left-join ×1
oracle ×1
plpgsql ×1
r ×1
select ×1
sql-server ×1
time-series ×1
totals ×1