【发布时间】:2020-07-31 23:49:24
【问题描述】:
我一遍又一遍地遇到同样的问题,希望有人能帮忙......
我有一个包含 28 个驴品种条目的类别列的大表,然后我在子查询中计算按这些类别中的每一个分组的两个特定值,如下所示:
WITH totaldonkeys AS (
SELECT donkeybreed,
COUNT(*) AS total
FROM donkeytable1
GROUP BY donkeybreed
)
,
sickdonkeys AS (
SELECT donkeybreed,
COUNT(*) AS totalsick
FROM donkeytable1
JOIN donkeyhealth on donkeytable1.donkeyid = donkeyhealth.donkeyid
WHERE donkeyhealth.sick IS TRUE
GROUP BY donkeybreed
)
,
我的目标是最终得到一个表格,该表格主要包含每个品种的病驴百分比,但我总是在不使用聚合函数的情况下无法分组的问题上苦苦挣扎,这是我无法做到的这里:
SELECT (CAST(sickdonkeys.totalsick AS float) / totaldonkeys.total) * 100 AS percentsick,
totaldonkeys.donkeybreed
FROM totaldonkeys, sickdonkeys
GROUP BY totaldonkeys.donkeybreed
当我运行此程序时,我最终得到了每种驴种的 28 个结果,我相信其中一个是正确的,但显然有数百个无用的数据点。
我知道我在这里可能真的很愚蠢,但我不断地用新的 donkeydata 一次又一次地遇到同样的问题,我显然应该以一种新的方式来构建整个事情,因为你不能做这个最终查询如果没有聚合函数,我想我一定会遗漏一些重要的东西。
【问题讨论】:
-
样本数据和期望的结果会有所帮助。
-
我会在这个网站上不惜一切代价避免使用“显而易见”这个词。
-
只是为了更新以防其他人看到这一点,这是我在最后一个查询中调用这两个表的疯狂方式,这就是问题所在。我最近将它用作一种技术,在这里不合适,加入 donkeybreed 修复了它。
标签: sql postgresql group-by percentage