2014-08-29 173 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   | 

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

我嘗試通過集團具有store_id 0和4集團通過與MySQL查詢條件

template_title獲取記錄,然後我得到這個紀錄

+-----+----------+------+-----------+ 
    | 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   | 

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

意味着我需要的4TEST_TITLE如果我組通過。

我的意思是說我想給優先Store_id如果我通過集團template_title

+0

對於'store_id' 4爲什麼ID = 1何不的對應行值id = 2? – 2014-08-29 12:35:26

+2

您選擇三個值:template_title,id和store_id。在按template_title進行分組時,您必須決定選擇哪個ID和哪個store_id。顯然你決定MAX(store_id) - 它已經回答了你的問題。那麼你想展示什麼樣的標識?爲什麼要顯示一個ID? – 2014-08-29 12:36:45

+0

我的意思是說,如果我通過'template_title'分組,我想優先考慮Store_id – 2014-08-30 06:12:35

回答

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