I have a field in a table which contains bitwise flags. Let's say for the sake of example there are three flags: `4 => read, 2 => write, 1 => execute` and the table looks like this`*`:

```
  user_id  |  file  |  permissions
-----------+--------+---------------
        1  |  a.txt |  6    ( <-- 6 = 4 + 2 = read + write)
        1  |  b.txt |  4    ( <-- 4 = 4 = read)
        2  |  a.txt |  4
        2  |  c.exe |  1    ( <-- 1 = execute)

```

I'm interested to find all users who have a particular flag set (eg: write) on ANY record. To do this in one query, I figured that if you OR'd all the user's permissions together you'd get a single value which is the "sum total" of their permissions:

```
  user_id  |  all_perms
-----------+-------------
        1  |  6        (<-- 6 | 4 = 6)
        2  |  5        (<-- 4 | 1 = 5)

```

`*`*My actual table isn't to do with files or file permissions, 'tis but an example*

Is there a way I could perform this in one statement? The way I see it, it's very similar to a normal aggregate function with GROUP BY:

```
SELECT user_id, SUM(permissions) as all_perms
FROM permissions
GROUP BY user_id

```

...but obviously, some magical "bitwise-or" function instead of SUM. Anyone know of anything like that?

(And for bonus points, does it work in oracle?)