2015-12-11 3 views
0

У меня есть следующая таблица (id, l_id, f_id, status). Я хочу написать запрос, который должен привести кзапрос с несколькими группами по

count | l_id | f_id | 
--------------------- 
20  | l1 | f1 
---------------------- 
32  | l1 | f2 
---------------------- 
4  | l2 | f1 

т.е., я хочу, чтобы получить счетчик F_ID для каждого конкретного l_id. Если бы мне просто нужно было найти счетчик f_id без l_id, я мог бы написать что-то

select count(*), f_id from table groupby f_id но как я могу еще больше улучшить разбиение счета на основе l_id?

Programatically Я имею в виду, в первую очередь выполнить запрос, который выполняет загрузку с помощью l_id из таблицы, а затем для каждого l_id я могу выполнить запрос

select count (*), f_id where l_id = <l_id> group by f_id, но тогда я должен был бы сделать несколько запросов. Мне было интересно, если я могу добиться этого в одном запросе

ответ

2

Синтаксис group by поддерживает более одного столбца, так что это очень просто:

select count(*), l_id, f_id 
    from table 
group by l_id, f_id 
+0

Этот запрос не будет возвращать правильное количество, если l_id уже не является уникальным. – DanK

+0

Знаешь что ... Я совершенно не прав в этом ... не знаю, что я видел раньше. Что-то о дублировании f_id. – DanK

0

На основании этого требования:

я хочу получите счетчик f_id для каждого конкретного l_id.

Вам нужно изолировать l_id, а затем выполнить подсчет на F_ID:

SELECT a.l_id, count(f_id) 
    FROM (SELECT l_id 
     FROM table 
     GROUP BY l_id) a 
INNER JOIN table b ON (a.id = b.id) 
GROUP BY a.l_id 
+0

Вам не кажется, что то, что написал @sstan, точна? –

+0

Знаешь что ... не слушай меня. Это был долгий день, и я ошибаюсь в этом. – DanK

+0

Если вы ищете количество уникальных записей, то да @sstan абсолютно корректен. Я смотрел записи, которые являются другой темой. Если вы считаете, что у вас есть дубликаты строк f_id, и вы хотите подсчитать количество фактических записей на l_id, тогда мой запрос будет работать. – DanK

Смежные вопросы