Sql 每个ID有多少个“;第1列”“;第2列”;和“;总计”;并按“;总计”;
我在PostgreSQL 9.2中有下表:Sql 每个ID有多少个“;第1列”“;第2列”;和“;总计”;并按“;总计”;,sql,database,postgresql,Sql,Database,Postgresql,我在PostgreSQL 9.2中有下表: CREATE TABLE leave ( "ID" text NOT NULL, "Leave class" text NOT NULL, "Leave Date" date NOT NULL, CONSTRAINT leave_pkey PRIMARY KEY (payroll, "Leave class", "Leave Date") ) 我想得到每个ID上有多少“紧急”、“病假”和“总假期”,并按“总假期”(降序)排序。大概是
CREATE TABLE leave
(
"ID" text NOT NULL,
"Leave class" text NOT NULL,
"Leave Date" date NOT NULL,
CONSTRAINT leave_pkey PRIMARY KEY (payroll, "Leave class", "Leave Date")
)
我想得到每个ID上有多少“紧急”、“病假”和“总假期”,并按“总假期”(降序)排序。大概是这样的:
类似的内容(不清楚是否使用ID或工资单)
请参见这也将显示零计数:如果要从另一个表中获取工资值,这一点很重要 查看更多信息 更简单的代码在这里
显示的输入不清楚期望的结果:23266只有一次病假,不是吗?23234有一张病假和一张紧急病假。@RaphaëlAlthaus,我在最后一张桌子上搞错了对不起。
select Payroll,
sum(case when "Leave class" = 'Emergency' then 1 else 0 end) as "emergency leave",
sum(case when "Leave class" = 'Sick' then 1 else 0 end) as "Sick leave",
count(*) as "Total"
FROM leave
group by Payroll
order by count(*) desc;
SELECT
base.payroll,
leaveCounts.Emergency,
leaveCounts.Sick,
leaveCounts.Total
FROM
(SELECT DISTINCT payroll FROM leave) AS base
LEFT JOIN
(SELECT
COUNT(CASE WHEN "Leave class" = 'Emergency' THEN 1 END) AS Emergency,
COUNT(CASE WHEN "Leave class" = 'Sick' THEN 1 END) AS Sick,
COUNT(*) AS Total,
payroll
FROM
leave
GROUP BY
payroll
) AS leaveCounts
ON base.payroll = leaveCOunts.payroll
ORDER BY
leaveCOunts.Total DESC;
SELECT
payroll,
COUNT(CASE WHEN "Leave class" = 'Emergency' THEN 1 END) AS Emergency,
COUNT(CASE WHEN "Leave class" = 'Sick' THEN 1 END) AS Sick,
COUNT(*) AS Total
FROM
leave
GROUP BY
payroll
ORDER BY
COUNT(*) DESC;