подсчёт кол-ва значений из списка

berkut

Новичок
подсчёт кол-ва значений из списка

подскажите, как можно подсчитать кол-во одинаковых значений, полученных из подзапроса, без временной таблицы? пример:
Код:
SELECT IF (item_1 = 1, item_2, item_1) AS item_id
FROM associations 
WHERE creator IN (
    SELECT DISTINCT u.id
    ....
)
нужно подсчитать количество одинаковых item_id, которые выдаёт этот запрос.
 

alpine

Новичок
berkut
Как ты себе представляешь результат работы такого запроса?
 

alpine

Новичок
berkut
Наркоман что ли? :D

-~{}~ 24.08.07 13:38:

Четко сформулируй вопрос, что есть и, что должны получить на выходе.
 

berkut

Новичок
alpine что именно не понятно? я уже избавился от этого запроса, перекроил структуру. а решение описанного:
Код:
SELECT item_id, COUNT(*) AS associations_count
FROM (
    SELECT IF (item_1 = 1, item_2, item_1) AS item_id
    FROM associations 
    WHERE creator IN (
        SELECT DISTINCT u.id
        ....
)
GROUP BY item_id
т.е. сразу не додумался, что вложенный запрос можно использовать в FROM
 

alpine

Новичок
berkut
И у тебя получается та же временная таблица только называется она производная от подзапроса в условии FROM.
Почему бы не написать просто
Код:
SELECT IF (item_1 = 1, item_2, item_1) AS item_id, COUNT(*) as cnt
FROM associations 
WHERE creator IN (
    SELECT DISTINCT u.id
    ....
)
GROUP BY item_id
?

-~{}~ 24.08.07 19:54:

Так же я бы еще попробовал переписать данный запрос через INNER JOIN вместо подзапроса в IN(). Возможно он будет работать даже быстрее, так как оптимизатор может лучше оптимизировать джоин чем подзапрос.
 

berkut

Новичок
alpine вот за это спасибо, я и не знал, что в group by можно указывать "несуществующее" поле. но я уже поменял структуру таблиц. раньше хранил ассоциативные связи 2-ух элементов в виде:
Код:
item_1    item_2    creation_date
и т.д. т.е. на одну связь - одна строка. сейчас сделал так, что в таблице на одну связь, например объектов 3 и 5, приходится 2 строки: 3 - 5 и 5 - 3. жизнь стала сказкой
 
Сверху