【发布时间】:2015-06-03 15:52:45
【问题描述】:
我有一个结构如下的表:
Contents (
id
name
desc
tdate
categoryid
...
)
我需要对这张表中的数据做一些统计。例如,我想通过分组和该类别的 id 来获取具有相同类别的行数。此外,我想按降序限制n 行,如果有更多可用类别,我想将它们标记为“其他”。到目前为止,我已经对数据库进行了 2 个查询:
按降序选择n 行:
SELECT COALESCE(ca.NAME, 'Unknown') AS label
,ca.id AS catid
,COUNT(c.id) AS data
FROM contents c
LEFT OUTER JOIN category ca ON ca.id = c.categoryid
GROUP BY label
,catid
ORDER BY data DESC LIMIT 7
选择其他行为一:
SELECT 'Others' AS label
,COUNT(c.id) AS data
FROM contents c
LEFT OUTER JOIN category ca ON ca.id = c.categoryid
WHERE c.categoryid NOT IN ($INCONDITION)
但是当我在 db 表中没有留下任何类别组时,我仍然会得到“其他”记录。是否可以在一个查询中进行,并使“其他”记录可选?
【问题讨论】:
-
您能否提供带有完整 DDL 表
Contents的示例数据(行)和预期输出? -
您的表定义应该显示数据类型和约束。基本上你在 psql 中使用
\d contents得到什么。一些具有预期输出的示例数据将有助于澄清。
标签: sql postgresql query-optimization aggregate sql-limit