MYSQL优先考虑GROUP BY选择的记录

时间:2018-02-23 16:28:43

标签: mysql

我编写了一个MYSQL脚本,但我无法获得所需的结果。我很难解释我试图这样做的例子。

这是我的MYSQL脚本:

SELECT device_uuid,
       gender,
       day_epoch,
       hour,
       age
FROM daily_stats_venue_unique_device_uuids_per_hour
WHERE (day_epoch + (3600*hour)) >= 1519171200 
 AND (day_epoch + (3600*hour)) < 1519340400 
 AND venue_id = 4
GROUP BY device_uuid

这将返回这些结果:

results1

(其中有2个看起来非常相似的device_uuid但是在开始附近有一个6而不是5个。很抱歉这让我的下一个截图更加混乱,但请仔细看看。)

但是当我通过这个修改组时:GROUP BY device_uuid, gender我得到了这些结果:

results2

正如您所看到的,有2条记录具有相同的device_uuid(记录2/3),但它们具有不同的性别。我想使用我向您展示的第一个查询,但如果记录有性别,我希望获得该结果,而不是没有性别的结果。

感谢您提前提供任何帮助

1 个答案:

答案 0 :(得分:0)

取自this answer

SELECT * FROM (
    SELECT device_uuid,
           gender,
           day_epoch,
           hour,
           age
    FROM daily_stats_venue_unique_device_uuids_per_hour
    WHERE (day_epoch + (3600*hour)) >= 1519171200 
     AND (day_epoch + (3600*hour)) < 1519340400 
     AND venue_id = 4
    ORDER BY gender DESC
) t
GROUP BY device_uuid

记下答案的警告:

  

从版本5.7开始,默认情况下sql-mode设置包含ONLY_FULL_GROUP_BY,因此要使其工作,您必须拥有此选项(将服务器的选项文件编辑为删除此设置)。

进一步说明,this answer也可以为您提供另一种可能的解决方案。