这可能不是一个合适的论坛,但是我想了解查询中发生的逻辑错误。
我在下面的查询中写道,以了解有多少用户传递的邮件多于发送的邮件(可能是数据捕获错误,只是想对其进行评估)。
SELECT COUNT(DISTINCT user_id)
FROM wk_24_trigger
UNION
SELECT COUNT(DISTINCT user_id)
FROM (
SELECT *, (CASE WHEN delivered > 0 THEN 1 ELSE 0 END) as D,
(CASE WHEN sent > 0 THEN 1 ELSE 0 END) as S
FROM wk_24_trigger) t
WHERE t.D > t.s
我得到的结果如下
_c0
1 1056840
2 1819729
我不明白为什么要在第2行>第1行。
理想情况下,即使已发送的每个条目>发送,第2行和第1行也应该相同
答案 0 :(得分:2)
您确定第一行是第一个查询的结果,第二行是第二个查询的结果吗??
它不一定是..
尝试在每个查询的计数之后添加别名,并验证结果。
您也可以查看下面的示例。
Code:1 var _bind =from a in Orders:
select new OrderItem()
{
ItemName = a.ItemName,
Amount = a.Amount,
Comment = a.Comment,
Status = a.Status,
TableNumber = a.TableNumber,
ordertime = a.ordertime,
Id = a.Id,
};
dgviewOrders.DataSource = _bind.ToList();
code 2: OrderItem currentObject = (OrderItem)row.DataBoundItem;
Code 3 :var _bind =from a in Orders:
select new()
{
ItemName = a.ItemName,
Amount = a.Amount,
Comment = a.Comment,
Status = a.Status,
TableNumber = a.TableNumber,
ordertime = a.ordertime,
Id = a.Id,
};
和系统输出如下。
WITH TEMP
AS(
SELECT 'A' USER_ID , 1 DELIVERED , NULL SENT FROM DUAL
UNION
SELECT 'B' ID , 10 A , 1 B FROM DUAL
UNION
SELECT 'C' ID , NULL A , 1 B FROM DUAL
UNION
SELECT 'D' ID , -1 A , 1 B FROM DUAL
)
SELECT COUNT(DISTINCT USER_ID), 'QUERY_1' QUERY
FROM TEMP
UNION
(SELECT COUNT(DISTINCT USER_ID), 'QUERY_2'
FROM (
SELECT USER_ID,DELIVERED,SENT,
(CASE
WHEN DELIVERED > 0 THEN
1
ELSE
0
END) D,
(CASE
WHEN SENT > 0 THEN
1
ELSE
0
END) S
FROM TEMP) T
WHERE T.D > T.S);
您的情况也是如此。