mysql - 分组依据——不对 NULL 进行分组并控制显示的记录

标签 mysql

类似于这个问题:group by not-null values 我试图只对列 groupID 不为空的记录进行分组:

+--+-------+------+-----+-----+----------+
|id|groupId|isMain|name |stars|created   |
+--+-------+------+-----+-----+----------+
..1..abcd....1.....john....5...2018-06-01.
..2..NULL....0.....albert..3...2018-05-01.
..3..abcd....0.....clara...1...2018-06-01.
..4..NULL....0.....steph...2...2018-07-01.

通过这个查询,我只能对 groupId 不为 null 的那些记录进行分组:

SELECT *, SUM(stars) as stars 
FROM table AS 
GROUP BY (case when `groupId` is null then id else `group` end)
ORDER BY created DESC

这给了我结果:

4..NULL....0.....steph...2...2018-07-01
3..NULL....0.....clara...6...2018-06-01
2..NULL....0.....albert..3...2018-05-01

我正在尝试为那些分组的记录选择 isMain1 的记录,但我不知道如何实现。
我试过玩 HAVING 但这给了我一个完全不同的结果。

最佳答案

您可以使用 CASE 或 IFNULL 但您应该使用适当的聚合函数和按列分组的子句,例如:

 select   ifnull(groupID, id), name,  sum(stars), max(created) as my_create
 from  table
 group by ifnull(groupID, id), name
 order by my_create 

关于mysql - 分组依据——不对 NULL 进行分组并控制显示的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55939242/

相关文章:

mysql - 随机播放数据库 ID

php - 1064 预约 Pro 出错

php - 如何检查预订期限从当前日期算起是否已结束

mysql - MATCH AGAINST 不适用于两个 LEFT JOIN : #1210 - Incorrect arguments to MATCH

sql - 在 MySQL 中删除一行

mysql - 在查询中使用 LEFT JOIN 或 GROUP BY 时,CONCAT() 结果意外截断

javascript - 根据类别从数据库中调用不同类型的问题

mysql - 将字符串 dd/MM/yyyy 日期转换为 java.sql.date yyyy-MM-dd

php - 这个 SQL 查询有什么问题?

mysql - 使用 unix 和 mysql 创建 wordpress 转储(.wxr)