我有一个包含名、姓和日期的表,如下所示:
_________
| People |____________________________________
|----------------------------------------------|
| first_name | last_name | date |
|----------------------------------------------|
| Jerry Garcia 01/01/2001 |
| Adam Garcia 01/02/2001 |
| Hans Fist 01/02/2001 |
| Lucy Fist 01/02/2001 |
|______________________________________________|
我有一个group by和order by语句,像这样:
$this->db->group_by("date, last_name");
$this->db->order_by('date ASC');
所以很自然地,你会期望它只给你两个Garcia的一行和两个Fist的一行。我想做的是,记住这是一个非常简化的例子,按姓氏分组,但是如果last_name = 'Garcia'
不。因此,您将在结果集中看到garcias和一个fist。
我该怎么做?
如果它像GROUP BY date, last_name NOT 'Garcia'
那样简单就好了
也许你可以在你的第一个查询中添加一些像
WHERE name != 'Garcia'
然后,执行
UNION SELECT * WHERE name = 'Garcia'
你应该能够摆脱GROUP BY
,只使用ORDER BY last_name DESC, date ASC
。
请注意,如果你有一个特定的问题,你正在努力解决,张贴问题。你会得到一个更好的答案!
可以在GROUP BY
子句上使用HAVING
。然后可以使用UNION
关键字连接两个结果集。
我自己想出了一个解决办法。对于任何发现自己处于类似情况的人,只需在查询的SELECT
部分中使用CASE/WHEN
语句。
你可以在每一行上使用一个布尔标志来分组。
CASE `last_name` WHEN 'Garcia' THEN '1' END AS is_garcia