在MySQL中,我想对某些状态的值求和并将它们显示在同一计数列中,
我必须给一个计数条件吗?!
状态为0、1、2和3,状态= 2是2、3、4个计数值的总和。
我应该给什么样的条件?
我的查询:
SELECT A.STATUS, B.COUNT, B.REG_DT FROM
(SELECT 0 AS STATUS UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) A
LEFT JOIN (
SELECT STATUS , COUNT(*) AS COUNT, FROM TB_EXE WHERE reg_dt >= CURDATE()
GROUP BY STATUS
) B ON A.STATUS = B.STATUS
我的数据:
status | count
-----------------
0 | 1
-----------------
1 | 2
-----------------
2 | 1
-----------------
3 | 0
-----------------
4 | 2
预期结果:
status | count
-----------------
0 | 1
-----------------
1 | 2
-----------------
2 | 3
答案 0 :(得分:0)
您可以在以下情况下尝试以下情况
select case when status>1 then 2 else status end as status,
sum(count) as cnt from t
group by status
答案 1 :(得分:0)
SELECT STATUS,COUNT(*)
FROM T
WHERE STATUS < 2
GROUP BY STATUS
UNION ALL
(SELECT 2,COUNT(*)
FROM T
WHERE STATUS >= 2
)
分别处理这两个聚合的地方。
+--------+----------+
| STATUS | COUNT(*) |
+--------+----------+
| 0 | 1 |
| 1 | 1 |
| 2 | 3 |
+--------+----------+
3 rows in set (0.00 sec)
或更简洁
select case when status > 1 then 2 else status end, count(*)
from t
group by case when status > 1 then 2 else status end
答案 2 :(得分:0)
嗯,我想我会为此提供一种框架解决方案。 IE就是这样:
SELECT
Status,
Count,
SUM(Count) OVER(ORDER BY status ROWS
BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW) AS FramedCount
FROM Status
这将为您提供前所有行的累计计数作为框架计数。您可以处理应用程序中的逻辑以确定应该使用框架计数的状态,或者可以通过添加以下内容在查询中处理它。
SELECT
status,
CASE
when status <= 3 THEN count
ELSE SUM(count) OVER(ORDER BY status ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
END AS 'MyCount'
FROM statusInfo