Ary*_*Raj -10 mysql sql counting
我有以下数据:
htno sub marks credits
1 a 15 0
1 b 10 0
1 c 25 4
1 d 24 4
1 e 22 2
1 f 12 0
2 a 22 4
2 b 15 0
2 c 23 4
2 d 18 2
2 e 20 4
2 f 6 0
3 a 22 4 n so on
Run Code Online (Sandbox Code Playgroud)
我将向用户提供表格.如果用户输入他的halticket数字"1",那么它应该以这种方式在PHP和MySQL中显示输出:
Number of Backlogs Passed Subjects
3 3
Run Code Online (Sandbox Code Playgroud)
这意味着它应该计算零的数量并显示积压的数量并计算非零的数量并显示传递的主题的数量.
我怎样才能做到这一点?
Iai*_*der 12
我从文本格式的数据中删除了尾部和前导空格,并使用SQL Fiddle创建了一个等效的示例模式.设置如下所示:
CREATE TABLE Grades
(`htno` int, `sub` varchar(1), `marks` int, `credits` int)
;
INSERT INTO Grades
(`htno`, `sub`, `marks`, `credits`)
VALUES
(1, 'a', 15, 0),
(1, 'b', 10, 0),
(1, 'c', 25, 4),
(1, 'd', 24, 4),
(1, 'e', 22, 2),
(1, 'f', 12, 0),
(2, 'a', 22, 4),
(2, 'b', 15, 0),
(2, 'c', 23, 4),
(2, 'd', 18, 2),
(2, 'e', 20, 4),
(2, 'f', 6, 0),
(3, 'a', 22, 4)
;
Run Code Online (Sandbox Code Playgroud)
我做了以下假设:
htno.credits表示学生"积压"中的主题.credits表示"传递的主题".此查询符合您的要求:
SELECT
SUM(CASE WHEN credits = 0 THEN 1 ELSE 0 END) AS `Number of backlogs`,
SUM(CASE WHEN credits > 0 THEN 1 ELSE 0 END) AS `Passed subjects`
FROM Grades
WHERE htno = 1;
Run Code Online (Sandbox Code Playgroud)
我们SELECT从Grades表中使用WHERE过滤器为学生使用halticket编号1的所有行.
第一个CASE表达式计算一个新列,如果credit为非零,则包含0,否则包含1.
第二个CASE表达式计算一个新列,如果credit是非正数,则包含0,否则包含1.
您可以想象中间结果如下所示:
[Case expression 1] [Case expression 2]
0 1
0 1
1 0
1 0
1 0
0 1
Run Code Online (Sandbox Code Playgroud)
我们将整个结果集视为聚合组,并使用该SUM函数将第一个和第二个计算列中的所有值相加.
第一列的总和为3,第二列的总和为3.
这为您提供了最终结果集.
您可以在SQL Fiddle上试验我的交互式解决方案.
| 归档时间: |
|
| 查看次数: |
1054 次 |
| 最近记录: |