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
答案 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