SQL:按多个字段分组

filo891

我需要选择一些值,将它们分组并按多个字段排序。这是我的小提琴:http ://sqlfiddle.com/#!2/ a80eb/3

我需要实现的是,从表中packet_data为给定值client_mac以及列中的每个不同项目选择一行drone_id此行应该包含的价值client_macdrone_id最常见的值antenna_signal列的给定组合drone_idclient_mac

该列drone_id是表中的外键,此表中drones有一列map_id我需要关注的只是从那些行packet_data表具有一定map_iddrones表。

我想要的结果应该是这样的:

CLIENT_MAC          DRONE_ID    ANTENNA_SIGNAL
3c:77:e6:17:9d:1b   1           -37
3c:77:e6:17:9d:1b   2           -57

我当前的SQL查询是:

SELECT `packet_data`.`client_mac`,
       `packet_data`.`drone_id`,
       `packet_data`.`antenna_signal`,
       count(*) AS `count`
FROM `packet_data`
JOIN `drones` ON `packet_data`.`drone_id`=`drones`.`custom_id`
WHERE `drones`.`map_id` = 11
  AND `client_mac`="3c:77:e6:17:9d:1b"
GROUP BY drone_id,
         `packet_data`.`antenna_signal`
ORDER BY `packet_data`.`drone_id`,
         count(*) DESC

而我目前的结果:

CLIENT_MAC          DRONE_ID    ANTENNA_SIGNAL
3c:77:e6:17:9d:1b   1           -37
3c:77:e6:17:9d:1b   1           -36
3c:77:e6:17:9d:1b   2           -57
3c:77:e6:17:9d:1b   2           -56
马来语

您可以通过不太好的相关子查询(也可以在子查询上)获得所需的结果。我不知道它将如何扩展海量数据:

SELECT
    -- the desired columns
    client_mac,
    drone_id,
    antenna_signal,
    amount               -- I added this so I could easily check the result
FROM (
    -- give me the count of every value of the antenna_signal column 
    -- for each combination of client_mac, drone_id and antenna_signal
    SELECT 
        client_mac,
        antenna_signal,
        drone_id,
        COUNT(antenna_signal) AS amount
    FROM
        packet_data
    WHERE
        client_mac = '3c:77:e6:17:9d:1b'
    GROUP BY
        client_mac,
        drone_id,
        antenna_signal
) as1
WHERE
    -- but I want only those rows with the highest count of equal antenna_signal
    -- values per client_mac and drone_id
    amount = (
        SELECT 
            MAX(as2.amount)
        FROM (
            SELECT 
                pd2.client_mac,
                pd2.antenna_signal,
                pd2.drone_id,
                COUNT(pd2.antenna_signal) AS amount
            FROM
                packet_data pd2
            WHERE
                client_mac = '3c:77:e6:17:9d:1b'
            GROUP BY
                client_mac,
                drone_id,
                antenna_signal
            ) as2
        WHERE 
            as1.client_mac = as2.client_mac AND as1.drone_id = as2.drone_id
);

如果需要的话,联接其他表应该不会太困难。但是,如果对于相同的client_mac和drone_id有两个计数相等的天线信号,它将显示两行。在更新的小提琴中查看它http://sqlfiddle.com/#!2/a80eb/80

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ElasticSearch按多个字段分组

来自分类Dev

MS Access选择按多个字段分组的前n个查询

来自分类Dev

按多个字段分组时,MySQL WITH ROLLUP

来自分类Dev

在MYSQL中按多个字段分组

来自分类Dev

如何按多个字段将Ruby可枚举/数组分组?

来自分类Dev

在MongoDB中按多个字段分组

来自分类Dev

在多个字段上分组SSRS报告

来自分类Dev

按多个字段计数

来自分类Dev

mongo按可以出现在多个字段中的值分组

来自分类Dev

使用SQL跨多个字段对输出进行分组

来自分类Dev

mongodb:匹配,按多个字段分组,项目和计数

来自分类Dev

如何按多个字段对子文档数组进行分组?

来自分类Dev

MS Access选择按多个字段分组的前n个查询

来自分类Dev

如何按多个字段将Ruby可枚举/数组分组?

来自分类Dev

在MongoDB中按多个字段分组

来自分类Dev

在SQL中使用分组依据获取多个字段的计数

来自分类Dev

mysql按几个字段中的任何一个或多个进行分组

来自分类Dev

MongoDB聚合按多个字段分组并获得平均值

来自分类Dev

每个对象按多个字段分组

来自分类Dev

按多个字段将Json数据分组

来自分类Dev

Elasticsearch按多个字段分组并汇总小时数(总计)

来自分类Dev

SQL按2个字段分组

来自分类Dev

mysql:简化请求-按多个字段分组

来自分类Dev

Elasticsearch获取最新文档,按多个字段分组

来自分类Dev

Linq - 按多个字段分组并计数(输出单个总数)

来自分类Dev

按多个字段对数组进行分组

来自分类Dev

按 2 个字段分组 oracle sql 内连接

来自分类Dev

使用 Lodash 在 Nodejs 中按多个字段分组

来自分类Dev

SQL查询获取最后一条记录按多个字段分组

Related 相关文章

热门标签

归档