mysql - SUM() 计算行两次并显示双倍结果
问题描述
为什么要SUM()
计算两次行并在此处显示实际结果的两倍?
在这里,我试图从每个学生 ( )的inv_idstatus
表中计算具有 0 值的总行数。inv_id.s_id
它必须根据inv_lst4
表中的行号显示,但这里显示。8
如果fee.id
是,GROUP_BY
那么它会显示实际的 SUM,但相同的学生 ID 开始重复。
请参阅小提琴- SQL Fiddle
数据库结构
班级
id | ttl
===========
1 | One
2 | Two
部分
id | ttl
===========
1 | A
2 | B
费用
id | ttl
===============
1 | Annual
2 | Monthly
学生
id | ttl | cls | sec
===========================
1 | John| 1 | 1
2 | Paul| 1 | 1
3 | Rina| 2 | 1
sec_fee
id | c_id| s_id| f_id| fee
===================================
1 | 1 | 1 | 1 | 1000
2 | 2 | 1 | 2 | 560
inv_id
id | s_id| ft_id | status
==================================
1 | 1 | 1 | 0
2 | 1 | 2 | 0
3 | 1 | 3 | 0
4 | 1 | 4 | 0
mysql
SELECT
student.id, student.ttl AS stdt,
cls.ttl AS cls,
sec.ttl AS sec,
GROUP_CONCAT(DISTINCT fee.id, '.', fee.ttl, '-', sec_fee.fee,'<br/>' ORDER BY sec_fee.f_id) AS amnt,
SUM(inv_id.status=0) AS upad,
SUM(inv_id.status=1) AS pad
FROM
student
JOIN
cls ON cls.id=student.cls
LEFT JOIN
sec ON sec.id=student.sec
LEFT JOIN
inv_id ON inv_id.s_id = student.id
LEFT JOIN
sec_fee ON sec_fee.c_id = student.cls
LEFT JOIN
fee ON fee.id = sec_fee.f_id
WHERE
cls.id = 1
解决方案
推荐阅读
- c# - 我该如何解决这个问题,以便将有序列表放入文本框中?
- c++ - 当我调用 `QIODevice::readAll()` 时,QNetworkReply 会随机出现段错误,通常与损坏的数据有关。这是因为它仍然开放吗?
- java - Java中的数组是否有“finalize”方法?
- sql - 删除最终输出中的重复记录
- flutter - 启用flutter web会禁用所有模拟器
- azure - 在 Azure 中阅读和处理电子邮件附件的最佳方式是什么?
- flutter - 如何使用 onPressed() 为喜欢的图标选择单个图像?
- django - 带有 Charts.js 的选项卡式 html 视图中的 Django_tables2?
- sql - 按月运行累积计数组
- ios - 为什么 ld 有时将“重复符号”问题视为警告,有时将其视为错误?