sql - SELECT * 和 SELECT COUNT(*) 在一个查询中
问题描述
我的 SQL 查询看起来像这样
SELECT *
FROM categories AS c
LEFT JOIN LATERAL (SELECT i.*
FROM influencer_profiles AS i
WHERE c.id = i.category_id
ORDER BY i.updated_at
LIMIT 2) AS i ON 1 = 1
INNER JOIN users AS u ON i.user_id = u.id
但我也想计算每个influencer_profile
类别以显示每个类别中有多少influencer_profile
s。如何使用COUNT(*)
选择所有列?
SELECT *
FROM categories AS c
LEFT JOIN LATERAL (SELECT COUNT(*)
FROM influencer_profiles AS i
WHERE c.id = i.category_id
ORDER BY i.updated_at
LIMIT 2) AS i ON 1 = 1
INNER JOIN users AS u ON i.user_id = u.id
此代码不起作用。
解决方案
也许你只想要一个窗口函数。我注意到您left join
在一个地方使用并且inner join
正在撤消它。
所以,我在想:
SELECT c.*, i.*, u.*,
COUNT(*) OVER (PARTITION BY c.id) as category_cnt
FROM categories c LEFT JOIN LATERAL
(SELECT i.*
FROM influencer_profiles AS i
WHERE c.id = i.category_id
ORDER BY i.updated_at
LIMIT 2
) i
ON 1=1 LEFT JOIN
users u
ON i.user_id = u.id;
推荐阅读
- dialogflow-es - Dialogflow 是否可以作为语音界面添加到 Web 应用程序和语音启用 Web 应用程序功能?
- angular - 如何在 Angular 中使用 constant.service.ts 文件解决服务调用?
- stripe-payments - 如何设置促销代码,用于条带结帐一次性付款
- python - python statsmodel.api.OLS() 与 R lm()
- javascript - Apple M1 芯片上的随机“断言失败”错误
- javascript - 字符串编码器到固定大小的输出
- git - 如何在保留 git 历史记录的同时在我不拥有的远程存储库下移动没有远程的本地唯一 git 存储库?
- python - Django:从两个 OneToOne 字段的模型中获取 QuerySet
- node.js - 更新标准输出的子进程事件
- c - 字符串文字的 printf 格式规范?