mysql - 查看与 mariadb 上带有子查询的命令显示的结果不同
问题描述
亲爱的,
我试图创建一个视图来总结一年中每个类别(行)和月份(列)的交易,如下所示:
SELECT counterpart.id_category as catid, category AS Category, (
SELECT COALESCE(SUM(amount), 0)
FROM transaction
INNER JOIN counterpart
ON transaction.id_counterpart = counterpart.id_counterpart
WHERE YEAR(date) = YEAR(now())
AND MONTH(date) = 1
AND id_category = catid
) AS Jan, [...]
FROM transaction
INNER JOIN counterpart
ON transaction.id_counterpart = counterpart.id_counterpart
INNER JOIN category
ON counterpart.id_category = category.id_category
WHERE transaction.id_user = 2
AND YEAR(date) = YEAR(now())
GROUP BY category
我不知道这是否是一个好方法,至少它可以作为单个命令而不是视图。
在视图中,WHERE id_category = catid
for 子查询无法正常工作。
谢谢你。
解决方案
我怀疑条件聚合会比许多子查询更合适和更快。
例如
SELECT counterpart.id_category as catid, category AS Category,
sum(case when month(date) = 1 then 1 else 0 end) as Jan,
sum(case when month(date) = 2 then 1 else 0 end) as feb,
sum(case when month(date) = 3 then 1 else 0 end) as Mar
FROM transaction
INNER JOIN counterpart
ON transaction.id_counterpart = counterpart.id_counterpart
INNER JOIN category
ON counterpart.id_category = category.id_category
WHERE transaction.id_user = 2
AND YEAR(date) = YEAR(now())
GROUP BY counterpart.id_category,category
推荐阅读
- import - 使用 proc import sas 指定格式
- javascript - 使用隐藏输入将表单信息和附加变量从 HTML 发送到 PHP
- php - 从 xe 转换器 api 获取数据时遇到问题
- c# - 这两种形式的WebApi路由有什么区别?
- php - 从包含字符串和 laravel 集合的多维数组中删除重复项
- amazon-web-services - 在 AWS 上测试 Lambda 函数时遇到问题
- angular - 从 Angular 到 Laravel 的日期总是“现在”
- azure - 在数据仓库脚本中出现解析错误
- ios - 强制执行正在进行的主队列处理程序(iOS)
- c - 用户输入(字符串)写入文件,直到用户给出一个空行