This is table.
idx | statusIdx | date |
---|---|---|
1 | 1 | 2022-05-12 02:24 |
2 | 2 | 2022-05-12 02:24 |
3 | 3 | 2022-06-12 02:24 |
4 | 1 | 2022-07-12 02:24 |
5 | 1 | 2022-07-12 02:24 |
6 | 2 | 2022-07-12 02:24 |
How can i get like this?
stauts1 | status2 | status3 | |
---|---|---|---|
2022-05 | 1 | 1 | 0 |
2022-06 | 0 | 0 | 1 |
2022-07 | 2 | 1 | 0 |
sum | 3 | 2 | 1 |
I've tried to use row_number()
and count() over()
.
SELECT
FDATE, cnt1, cnt2, cnt3
FROM
(SELECT
DATE_FORMAT(date, "%Y.%m") AS FDATE,
COUNT(case when statusIdx=1 then 1 end) over(PARTITION BY date, statusIdx) AS cnt1,
COUNT(case when statusIdx=2 then 1 end) over(PARTITION BY date, statusIdx) AS cnt2,
COUNT(case when statusIdx=3 then 1 end) over(PARTITION BY date, statusIdx) AS cnt3,
row_number() over (PARTITION by date, statusIdx) AS rnk
FROM transfer
WHERE date betWEEN "20212-05-01" AND "2022-07-31"
ORDER BY FDATE ASC
) t
WHERE rnk = 1
It show vertically counting.
num | FDATE | cnt1 | cnt2 | cnt3 |
---|---|---|---|---|
1 | 2022-05 | 1 | 0 | 0 |
1 | 2022-05 | 0 | 1 | 0 |
3 | 2022-06 | 0 | 0 | 1 |
4 | 2022-07 | 2 | 0 | 0 |
5 | 2022-07 | 0 | 1 | 0 |
How to aggregation without group_by in mysql?
CodePudding user response:
Used sum() over partition. see dbfidde link if this works.