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

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

i essayer d'obtenir dossier par le groupe par template_title ayant store_id 0 et 4.Groupe par avec la condition dans la requête mysql

alors j'ai obtenu ce disque

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

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

mais j'ai besoin enregistrement ayant un groupe par mais si store_id n'est pas 0 alors il doit être enregistré. comme je l'ai besoin de ce type de données

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

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

signifie que je dois TEST_TITLE de 4 si je groupe par.

Je voulais dire que je veux donner la priorité -Store_id si i Groupe par template_title

+0

Pour 'store_id' 4 pourquoi id = 1 pourquoi pas la valeur de la ligne correspondante de id = 2? –

+2

Vous sélectionnez trois valeurs: template_title, id et store_id. Lorsque vous groupez par template_title, vous devez décider quel identifiant et quel store_id sélectionner. Évidemment, vous avez choisi MAX (store_id) - qui répond déjà à votre question. Alors quel id voulez-vous montrer? Pourquoi montrer un ID du tout? –

+0

Je voulais dire que je veux donner la priorité à Store_id si je Group par 'template_title' –

Répondre

2

Ce n'est pas exactement un group by. Vous souhaitez hiérarchiser les lignes en fonction des règles métier. La règle semble être sélectionner la ligne avec 4 d'abord, puis celui avec 0. Il pense que la façon la plus simple utilise 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

Vous pouvez utiliser MAX pour obtenir la plus grande valeur dans la colonne:

SELECT 
    id, 
    template_title, 
    MAX(store_id) 
FROM myTable 
GROUP BY template_title 
Questions connexes