将 2 个不同的查询合并为一个
Posted
技术标签:
【中文标题】将 2 个不同的查询合并为一个【英文标题】:Combining 2 different queries into one 【发布时间】:2016-03-10 20:13:30 【问题描述】:我有 2 个查询,我想合并为 1 个。但是,我收到了一个错误:
//第一个查询: 选择 @rownum := @rownum +1 `index` , t。 * FROM ipAll t, ( SELECT @rownum :=0 ) r //第二个查询: 选择不同的 计数(IP) , 总和(查看次数) , 日期 来自 ipAll WHERE date LIKE '%-12-%' 按日期分组 按日期排序 ASC 限制 31 // 组合查询:(完全错误。我该如何解决?) 选择 @rownum := @rownum +1 `index` ,不同的计数(IP) , 总和(查看次数) , 日期 FROM ipAll t, ( SELECT @rownum :=0 ) r WHERE date LIKE '%-12-%' 按日期分组 按日期排序 ASC 限制 31
【问题讨论】:
结合是什么意思?你能举例说明这两个查询的结果吗?以及您希望如何合并这些结果?在 mysql 中,有一条 UNION 语句,它将合并多个查询的结果。但是,结果需要具有相同的列。 【参考方案1】:我建议删除distinct
。
假设您的表格包含以下内容:
| dt | ip | views |
|----------------------------|---------|-------|
| December, 01 2015 00:00:00 | 1.1.1.1 | 100 |
| December, 01 2015 00:00:00 | 2.2.2.2 | 10 |
| December, 02 2015 00:00:00 | 3.3.3.3 | 4 |
| December, 01 2014 00:00:00 | 1.1.1.1 | 100 |
| November, 01 2015 00:00:00 | 1.1.1.1 | 1 |
| November, 01 2015 00:00:00 | 2.2.2.2 | 2 |
查询:
SELECT
@rownum := @rownum +1 `index`,
COUNT( ip ), SUM( views ) , dt
FROM ipAll, ( SELECT @rownum :=0 ) r
WHERE dt LIKE '%-12-%'
GROUP BY dt
ORDER BY dt ASC
LIMIT 31;
将导致:
| index | COUNT( ip ) | SUM( views ) | dt |
|-------|-------------|--------------|----------------------------|
| 3 | 1 | 100 | December, 01 2014 00:00:00 |
| 1 | 2 | 110 | December, 01 2015 00:00:00 |
| 2 | 1 | 4 | December, 02 2015 00:00:00 |
获得相似(不完全相同)结果的另一种方法是:
select @rownum := @rownum +1 `index`, main.*
from ( SELECT @rownum :=0 ) r, (
SELECT COUNT( ip ), SUM( views ) , dt
FROM ipAll
WHERE dt LIKE '%-12-%'
GROUP BY dt
LIMIT 31
) main
ORDER BY dt ASC
结果如下:
| index | COUNT( ip ) | SUM( views ) | dt |
|-------|-------------|--------------|----------------------------|
| 1 | 1 | 100 | December, 01 2014 00:00:00 |
| 2 | 2 | 110 | December, 01 2015 00:00:00 |
| 3 | 1 | 4 | December, 02 2015 00:00:00 |
SQLFiddle 示例:http://sqlfiddle.com/#!9/beb98/3
【讨论】:
非常好。在我意识到它是日期的缩写之前,我对名为 dt 的列感到困惑。以上是关于将 2 个不同的查询合并为一个的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework Core:如何将 2 个 COUNT 查询合并为一个