- For each user 3 codes are there(10,20,30)
- if all codes(10,20,30) are true then it has to JOINED
- if any codes(10,20,30) are False then it has to NEGLECTED
- WE have to check max(date)
Table is below:
x
+-------+------+-------+------------+
| user | code | bool | date |
+-------+------+-------+------------+
| user1 | 10 | True | 31/10/2019 |
| user1 | 20 | True | 31/10/2019 |
| user1 | 30 | False | 31/10/2019 |
| user2 | 10 | True | 31/10/2019 |
| user2 | 20 | True | 31/10/2019 |
| user2 | 30 | True | 31/10/2019 |
| user3 | 10 | True | 31/10/2019 |
| user3 | 20 | True | 31/10/2019 |
| user3 | 30 | True | 31/10/2019 |
+-------+------+-------+------------+
Output user2 and user3 is JOINED, user1 is NEGLECTED
+------------+--------+-----------+
| DATE | JOINED | NEGLECTED |
+------------+--------+-----------+
| 31/10/2019 | 2 | 1 |
+------------+--------+-----------+
Advertisement
Answer
I assume that the column bool
is of data type BOOL
, so you can do it in 2 levels of aggregation:
select t.date,
sum(total = 3) joined,
sum(total <> 3) neglected
from (
select date, user, sum(bool) total
from tablename
group by date, user
) t
group by t.date
See the demo.
Results:
| date | joined | neglected |
| ---------- | ------ | --------- |
| 31/10/2019 | 2 | 1 |
If the column’s bool
data type is VARCHAR
then change:
sum(bool) total
to:
sum(bool = 'True') total