【问题标题】:Combining two SQL statement结合两个 SQL 语句
【发布时间】:2013-07-30 08:28:42
【问题描述】:

我想知道是否可以在 SQLite 中将两条语句合并为一条。

第一条语句如下:

SELECT MAX(goodput_mbps), packetsize_bytes 
FROM data 
WHERE src = "A" AND dst = "B" 
GROUP BY packetsize_bytes

产生类似的东西:

(1.065251641628522, 32)
(2.023058064838313, 64)
(3.9937457226166333, 128)
(7.13931248161879, 256)
(9.732371794078158, 384)
(12.030082350641777, 512)
(14.941748420411137, 640)
(16.768300606617814, 768)
(19.55032187231529, 1028)
(21.54109687187735, 1280)
(23.025071751003825, 1460)
(15.871752691948677, 1534)
(17.309115863006014, 1788)
(18.40483524961694, 2048)

然后,对于每个条目,我使用 WHERE 子句的每个记录的第一个和第二个条目作为参数运行另一个 SQL 查询,例如,对于我将运行的上一个结果集的第一个条目:

SELECT MAX(median)-MIN(median) / MAX(bitrate_mbps)-MIN(bitrate_mbps), packetsize_bytes 
FROM data 
WHERE src = "A" and dst = "B" and packetsize_bytes = 32 and bitrate_mbps < 1.12 
ORDER BY bitrate_mbps ASC 

产生类似的东西:

(0.035000000000000225, 32)

基本上,我希望有一个查询,它会产生如下内容:

(x, 32)
(x, 64)
(x, 128)
(x, 256)
(x, 384)
(x, 512)
(x, 640)
(x, 768)
(x, 1028)
(x, 1280)
(x, 1460)
(x, 1534)
(x, 1788)
(x, 2048)

这在 SQLite 中可行吗?我知道有 WHERE IN 子句,但它似乎接受一个参数。

【问题讨论】:

  • 我已经编辑了这个问题以澄清一些观点

标签: sql sqlite select where


【解决方案1】:
SELECT MAX(median)-MIN(median) / MAX(bitrate_mbps)-MIN(bitrate_mbps), 
       packetsize_bytes 
FROM 
    (SELECT MAX(goodput_mbps) , packetsize_bytes 
    FROM data 
    WHERE src = "A" AND dst = "B" 
    GROUP BY packetsize_bytes) 

WHERE packetsize_bytes = 32 and bitrate_mbps < 1.12 
ORDER BY bitrate_mbps ASC 

【讨论】:

  • 内部查询没有名为 medianbitrate_mbps 的列。
【解决方案2】:

您没有指定“合并”,但如果您只是想获得两个查询的结果,您可以将它们与UNION ALL 合并:

SELECT MAX(goodput_mbps), packetsize_bytes
FROM data
WHERE src = 'A' AND dst = 'B'
GROUP BY packetsize_bytes

UNION ALL

SELECT MAX(median)-MIN(median) / MAX(bitrate_mbps)-MIN(bitrate_mbps),
       packetsize_bytes
FROM data
WHERE src = 'A' AND dst = 'B'
  AND packetsize_bytes = 32 AND bitrate_mbps < 1.12

ORDER BY bitrate_mbps ASC

【讨论】:

    【解决方案3】:
    SELECT MAX(d1.median)-MIN(d1.median) / MAX(d1.bitrate_mbps)-MIN(d1.bitrate_mbps), d2.packetsize_bytes 
    FROM data d1, (SELECT MAX(goodput_mbps), packetsize_bytes FROM data WHERE src = "A" AND dst = "B" GROUP BY packetsize_bytes) d2  
    WHERE d1.src = "A" and d1.dst = "B" and d1.packetsize_bytes = d2.packetsize_bytes and d1.bitrate_mbps < "d2.MAX(goodput_mbps)"  
    GROUP BY d2.packetsize_bytes
    ORDER BY d2.packetsize_bytes ASC
    

    【讨论】:

      【解决方案4】:

      不,你不能,因为 SQLite 本身不支持分析函数也不支持 pl/sql。

      【讨论】:

        猜你喜欢
        • 2012-08-04
        • 1970-01-01
        • 2015-08-30
        • 2010-11-24
        • 2011-08-22
        • 2015-12-29
        • 2013-05-31
        • 1970-01-01
        • 2020-03-21
        相关资源
        最近更新 更多