2014-08-29 5 views
1
Sample Database Table: 
+-----+----------+------+-----------+ 
| id | template_title | store_id | 
+-----+----------+------+-----------+ 
| 1 |  TEST_TITLE | 0   | 
| 2 |  TEST_TITLE | 4   | 
| 3 |  TEST_TITLE | 2   | 
| 4 |  TEST_ITEM | 0   | 
| 5 |  TEST_LOVE | 0   | 

+-----+-----------------+----------+ 

я стараюсь, чтобы получить запись Группой по template_title имея store_id 0 и 4.Группировка с условием в MySQL Query

тогда я получил эту запись

+-----+----------+------+-----------+ 
    | id | template_title | store_id | 
    +-----+----------+------+-----------+ 
    | 1 |  TEST_TITLE | 0   | 
    | 4 |  TEST_ITEM | 0   | 
    | 5 |  TEST_LOVE | 0   | 

    +-----+-----------------+----------+ 

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

 +-----+----------+------+-----------+ 
     | id | template_title | store_id | 
     +-----+----------+------+-----------+ 
     | 1 |  TEST_TITLE | 4   | 
     | 4 |  TEST_ITEM | 0   | 
     | 5 |  TEST_LOVE | 0   | 

     +-----+-----------------+----------+ 

означает, что мне нужно TEST_TITLE из 4 если я группа по.

Я хотел сказать, что я хочу, чтобы дать Приоритет в Store_id если я группа по template_title

+0

Для 'store_id' 4 почему ID = 1, почему не соответствующее значение строка id = 2? –

+2

Вы выбираете три значения: template_title, id и store_id. Когда вы группируете файл template_title, вы должны решить, какой идентификатор и какой store_id выбрать. Очевидно, вы решили использовать MAX (store_id), который уже отвечает на ваш вопрос. Итак, какой идентификатор вы хотите показать? Зачем показывать идентификатор вообще? –

+0

Я хотел сказать, что хочу отдать Приоритету Store_id, если я Group by 'template_title' –

ответ

2

Это не точно group by. Вы хотите определить приоритеты строк на основе бизнес-правил. Правило, как представляется, выберите строку с 4 первой, а затем один с 0. Это кажется, самый простой способ использует union all:

select id, template_title, store_id 
from databasetable 
where store_id = 4 
union all 
select id, template_title, store_id 
from databasetable 
where store_id = 0 and 
     not exists (select 1 from template_title where store_id = 4); 
0

Вы можете использовать MAX, чтобы получить наибольшую ценность в колонке:

SELECT 
    id, 
    template_title, 
    MAX(store_id) 
FROM myTable 
GROUP BY template_title 
Смежные вопросы