如何在mysql中编写子查询

如何在mysql中编写子查询,mysql,sql,Mysql,Sql,我加入三张桌子,数一数。在这个查询中,我想再进行一次计数,比如total_trip,这意味着我已经加入了trip_details表,在这个表中,take all count是total trip count,我无法编写子查询 SELECT COUNT(T.tripId) as Escort_Count, ( SELECT COUNT(*) FROM ( SELECT a.allocationId FROM escort_allocation a

我加入三张桌子,数一数。在这个查询中,我想再进行一次计数,比如total_trip,这意味着我已经加入了trip_details表,在这个表中,take all count是total trip count,我无法编写子查询

SELECT COUNT(T.tripId) as Escort_Count,
(
    SELECT COUNT(*) FROM 
    (
        SELECT a.allocationId
        FROM escort_allocation a 
        INNER JOIN cab_allocation c ON a.allocationId = c.allocationId 
        WHERE c.allocationType = 'Adhoc Trip' 
        GROUP BY a.allocationId
    ) AS Ad

) AS Adhoc_Trip_Count 
FROM 
( 
    SELECT a.tripId FROM 
    trip_details a 
    INNER JOIN 
    escort_allocation b 
    ON a.allocationId = b.allocationId 
    GROUP BY a.allocationId 
) AS T
这是你想要的吗

SELECT td.tripId, COUNT(*) as total, SUM(ea.allocationType = 'Adhoc Trip') as adhocs
FROM trip_details td JOIN
     escort_allocation ea
     ON td.allocationId = ea.allocationId 
GROUP BY td.tripId;

在以下情况下使用子查询:

查询:

结果:

请查看:

您可以尝试上面的查询


这肯定会对您有所帮助。

您希望查询做什么?从你的陈述中还不清楚,我想再计算一次,比如total_trip,这意味着我已经加入了trip_details表,在这个表中,计算所有计数,即total trip count。期望的结果是什么?@lowerer。检查我的电脑。从这里我得到两个结果,比如护送计数和临时行程计数,现在我想再得到一个结果是总行程,总行程意味着我们必须从行程详情表@Stanislovas Kalašnikovas中进行计数,护送次数:5和临时出行次数:2和总出行次数:7更新您的问题不评论添加正确的数据样本和预期结果我尝试了您的查询,结果显示以下错误:“字段列表”LOL中的未知列“c.allocationType”-我想知道在SO上发布问题并粘贴回答进入文本编辑器。@Nishant Gupta。从这里我得到两个结果,如护送计数和临时行程计数,现在我想再得到一个结果是总行程,总行程意味着我们必须进行计数*从行程详情表我尝试了你的查询,它不能正常工作,就像我在之前两次临时行程发生时更改了cab分配表一样,现在我改变了3,现在结果应该是护送次数:5,临时出行次数:3,总出行次数:7,但我没有得到我预期的结果@KaniR所以5+3=8,而不是7。。。为什么Total_Trip应该是7?Total_Trip意味着我们必须从Trip_details中计算,不需要Escort_count+Adhoc_Trip_count@Stanislovas Kalašnikovas,你的小提琴工作得很好,我想再添加一个条件,比如Trip_details表我又添加了一个名为tripDate的列,我只需在今天的记录中记录上述结果,**我们必须在**tripDate列和trip_详情表中的条件之间使用的主要内容请更新您的小提琴please@KaniR问另一个问题。是的,它工作正常,但totatrip_计数在哪里,我们必须从trip_详情表中获取Total意味着我们必须从trip_详情中获取计数,无需护送次数+临时出行次数之和
  SELECT COUNT(T.tripId) as Escort_Count,
  (
      SELECT COUNT(*) FROM 
      (
          SELECT a.allocationId
          FROM escort_allocation a 
          INNER JOIN cab_allocation c ON a.allocationId = c.allocationId 
          WHERE c.allocationType = 'Adhoc Trip' 
          GROUP BY a.allocationId
      ) AS Ad

  ) AS Adhoc_Trip_Count,
  (SELECT COUNT(id) FROM trip_details) as Total_Count
  FROM 
  ( 
      SELECT a.tripId FROM 
      trip_details a 
      INNER JOIN 
      escort_allocation b 
      ON a.allocationId = b.allocationId 
      GROUP BY a.allocationId 
  ) AS T
Escort_Count   Adhoc_Trip_Count   Total_Trip
5              2                  7
        SELECT COUNT(DISTINCT Z.allocationId) Escort_Count,SUM(CASE WHEN allocationType='Adhoc Trip' THEN 1 END) Adhoc_Trip_Count  FROM (
           SELECT DISTINCT a.allocationId, allocationType FROM escort_allocation a 
           INNER JOIN cab_allocation c ON a.allocationId = c.allocationId 
           INNER JOIN trip_details TD ON a.allocationId = TD.allocationId 
           GROUP BY a.allocationId
        )Z;
SELECT Escort_Count,Adhoc_Trip_Count,Adhoc_Trip_Count+Escort_Count TOTAL FROM(
            SELECT COUNT(DISTINCT Z.allocationId) Escort_Count,SUM(CASE WHEN allocationType='Adhoc Trip' THEN 1 END) Adhoc_Trip_Count,COUNT(D)  FROM (
               SELECT DISTINCT a.allocationId, allocationType,SUM(1) D FROM escort_allocation a 
               INNER JOIN cab_allocation c ON a.allocationId = c.allocationId 
               INNER JOIN trip_details TD ON a.allocationId = TD.allocationId 
               GROUP BY a.allocationId
            )Z
        )ZZ;