【问题标题】:How to write sub queries in mysql如何在mysql中编写子查询
【发布时间】:2018-03-23 06:03:26
【问题描述】:

我要加入三个表并计算MY SQL FIDDLE。在这个查询中,我想再计算一个像total_trip 这样的计数,这意味着我已经加入了trip_details 表,在这个表中取出所有计数,即总行程计数,我无法编写子查询。

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

【问题讨论】:

  • 您究竟希望您的查询做什么?从您的陈述中不清楚,我想再算一次,比如total_trip,这意味着我已经加入了trip_details 表,在这个表中算出所有的总行程数
  • 期望的结果是什么?
  • @潜伏者。检查我的link。从这里我得到两个结果,如Escort_CountAdhoc_Trip_Count,现在我想再得到一个结果是total_trip,total_trip 意味着我们必须从trip_details 表中计算*
  • @ Stanislovas Kalašnikovas, Escort_Count:5 and Adhoc_Trip_Count:2 and total_trip : 7
  • 更新您的问题(不发表评论)添加适当的数据样本和预期结果

标签: mysql sql


【解决方案1】:

在下面使用子查询:


查询:

  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

检查一下:

SQL Fiddle

【讨论】:

  • 我试过你的查询它不能正常工作就像我改变了cab_allocation表之前两个Adhoc Trip发生了,现在我改变了3,现在结果应该是Escort_Count: 5Adhoc_Trip_Count:3Total_Trip: 7 但我没有得到预期的结果see your SQL fiddle
  • @KaniR 所以 5 + 3 = 8,而不是 7... 为什么 Total_Trip 应该是 7
  • Total_Trip 表示我们必须从 trip_details 中获取 count(*),不需要 Escort_Count + Adhoc_Trip_Count 的总和
  • @ Stanislovas Kalašnikovas,您的小提琴工作正常,我想再添加一个条件,例如trip_details 表我又添加了一个名为tripDate 的列,我只需要在今天的记录中获取上述结果, **我们必须在**tripDate 列和trip_details 表中的条件之间使用的主要内容请更新您的小提琴
  • @KaniR 为此提出另一个问题。
【解决方案2】:
        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;

OR

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;

你可以试试上面的查询。

肯定会对你有所帮助。

【讨论】:

  • 是的,它工作正常,但是totatrip_count 在哪里,我们必须从trip_details 表中获取
  • TOTAL 意味着我们必须从 trip_details 中获取 count(*),不需要 Escort_Count + Adhoc_Trip_Count 的总和
【解决方案3】:

这是你想要的吗?

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;

【讨论】:

  • 我试过你的查询它显示以下错误:Unknown column 'c.allocationType' in 'field list'
  • LOL - 我想知道通过在 SO 上发布问题并将答案粘贴到文本编辑器中来编写应用程序需要多长时间。
  • @ Nishant Gupta Check My Fiddle. 从这里我得到两个结果,比如 Escort_Count 和 Adhoc_Trip_Count,现在我想再取一个结果是 total_trip,total_trip 意味着我们必须从 trip_details 表中取 count * /跨度>
猜你喜欢
  • 1970-01-01
  • 2019-07-30
  • 2012-12-13
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2010-12-10
相关资源
最近更新 更多