kurkuma 13.03.2013 10:06 Gajim

Блджад. Есть 2 запроса в оракле, которые, по идее, аналогичные, но написанные двумя разными способами.
Для проверки аналогичности решил потыкать. count(*) в одном случае выдает 138 тысяч результатов, во втором 300 тысяч. То есть, по идее, они нихуя не аналогичные. Но вот если взять один запрос, потом MINUS второй запрос (столбцы одинаковые), то результат 0 строк. Второй MINUS первый тоже 0 строк.
В чем подъеб? Суть: первый запрос сделан через PARTITION BY, второй через GROUP. Примерные запросы:
SELECT u.id, max(p.time) OVER (PARTITION BY p.id) as last
FROM users u LEFT JOIN posts p ON p.user = u.id
WHERE p.type > 0
Второй:
SELECT u.id, max(p.time) as last
FROM users u LEFT JOIN posts p ON p.user = u.id
WHERE p.type > 0
GROUP BY u.id

1. korhonen 13.03.2013 13:47

left join
count будет считать все из users удовлетворяющее, даже если его нет в posts

хотя забей я хуету спорол.

2. kurkumakorhonen /1 13.03.2013 16:47

действительно

3. kurkumakurkuma /2 13.03.2013 16:47

всмысле, хуйню спорол

4. rtsome 13.03.2013 18:28

>MINUS
URGHAY

5. kurkumartsome /4 13.03.2013 18:29 Gajim

чо

6. korhonenkurkuma /3 13.03.2013 19:51

Ебать я дерево да

Ну все таки разве каунт не будет хуево щитать?

7. kurkumakorhonen /6 14.03.2013 05:10

будет, конечно. только он как-то наоборот хуево считает. в случае с PARTITION BY он должен вернуть больше строк чем от GROUP BY, потому что партишн не склеивает строки, то есть, получается куча дублей.
Если у тебя есть 3 строки с одинаковым значением поля по которому ты группируешь, то в случае GROUP'а у тебя на выходе будет 1 строка, а в случае партишна — 3 одинаковых строки

8. korhonenkurkuma /7 14.03.2013 07:23

так у тебя груп возвращает больше?
действительно, должен больше возвращать партишон
груп роллит строки жи

есть варик полностью поглядеть запросы, или смысла в этом нет?

9. kurkumakorhonen /8 14.03.2013 11:22 Gajim

да похуй уже, забей. после того как мне пришло чуть больше тыщи копий одной строки, я все таки решил юзать гроуп

Do you really want to delete ?