在mysql查询中按条件分组

时间:2014-08-29 12:29:47

标签: mysql sql group-by

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来分组记录。

然后我得到了这个记录

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

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

但是我需要记录有Group by但是如果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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您可以使用MAX获取列中的最大值:

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