MYSQL优先选择GROUP BY选择哪条记录

标签 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, sex时,我得到以下结果:

results2

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

感谢您提前提供的任何帮助

最佳答案

取自 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

请注意该答案的警告:

Since version 5.7, the sql-mode setting includes ONLY_FULL_GROUP_BY by default, so to make this work you must not have this option (edit the option file for the server to remove this setting).

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

关于MYSQL优先选择GROUP BY选择哪条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48952308/

相关文章:

mysql - 比较数据库表中的两个日期是否相等

mysql - 使用 table_1 中的数据更新 table_2

php - 将参数从 Android 传递到 php

php - 处理 CASE 语句中的 NULL

mysql - 如何使用mysql单查询获取总计数数据

php - PDO 绑定(bind)参数不起作用

php - 使用 php mysql 和 ajax 不会将值提交到数据库表

php - 使用下一个/上一个按钮从 mysql 回显一个图像

jquery - 如何将mysql数据加载到 Electron 应用程序中的jquery数据表中

mysql - 保证字段值是一个连续的序列