簡體   English   中英

選擇*以及其他表中的計數/總和

[英]Select * as well as count/sum from another table

我正在嘗試編寫一個MySQL查詢,以選擇表a中的所有行以及表b中的信息,同時還要查詢a的每一行中另一個表c中的值的計數和總和。

我會嘗試將其分解得更好一些,這是表的簡化版本:

表A

+---------+----------+-----------+
| id      | name     |      bid  |
+---------+----------+-----------+
| 1       | abc      |         1 |
| 2       | def      |         1 |
| 3       | ghi      |         2 |
+--------------------------------+

表B

+---------+----------+
| id      | name     |
+---------+----------+
| 1       | STAN     |      
| 2       | UCLA     | 
+--------------------+

表C

+---------+----------+-----------+
| id      | aid      |   cnumber |
+---------+----------+-----------+
| 1       | 1        |        40 |
| 2       | 1        |        20 |
| 3       | 2        |        10 |
| 4       | 3        |        40 |
| 5       | 3        |        20 |
| 6       | 3        |        10 |
+--------------------------------+

我需要的是一個查詢,該查詢將返回包含以下內容的行

a.id | a.name | b.id | b.name | SUM(c.cnumber)| COUNT(c.cnumber)

我不確定在MySQL中是否還可以做到這一點。

我當前的解決方案試圖查詢A + B左聯接,然后查詢帶有A + C右聯接的UNION。 但是,這並沒有給我想要的結果。

謝謝。

編輯:針對此問題重寫當前查詢:

SELECT
 a.id,
 a.name,
 b.id,
 b.name
 "somecolumn" as dummy_column
 "somecolumn1" as dummy_column1
FROM a
LEFT OUTER JOIN b ON a.b.id = b.id
UNION
SELECT
 "somecolumn" as dummy_column
 "somecolumn1" as dummy_column1
 "somecolumn2" as dummy_column2
 "somecolumn3" as dummy_column3
COUNT(c.cnumber) AS ccount
SUM(c.cnumber) AS sum
FROM a
RIGHT OUTER JOIN c ON a.id = c.a.id; 

不幸的是,MySQL沒有FULL OUTER JOIN,這是我的臨時工作,盡管我認為這不是正確的主意。

我想要的輸出是表A中的所有行以及表B中的一些信息,以及它們在表C中的總計輸入。

編輯2:

        SELECT
          a.id,
          a.name,
          b.id,
          SUM(c.cnumber) as totalSum,
          (SELECT count(*) FROM c as cc WHERE cc.aid = a.id) as totalCount
        FROM
          a
        LEFT JOIN b ON a.bid = b.id
        LEFT JOIN c ON c.aid = a.id;

對於未來類似的問題,解決方案:

        SELECT
          a.id AS aid,
          a.name,
          b.id,
          (SELECT SUM(c.rating) FROM c WHERE c.aid = aid) AS totalSum,
          (SELECT COUNT(c.rating) FROM c WHERE c.aid = aid) AS totalCount
        FROM
          a
        LEFT JOIN b ON a.bid = b.id;

您的查詢應為:-

SELECT
      a.id,
      a.name,
      b.id,
      (SELECT SUM(c.cnumber) FROM c as cd WHERE cd.aid = a.id) as totalSum,
      (SELECT count(*) FROM c as cc WHERE cc.aid = a.id) as totalCount
    FROM
      a
    LEFT JOIN b ON a.bid = b.id
    LEFT JOIN c ON c.aid = a.id;

它可能會幫助您。

我已經試過你的例子。

  SELECT * ,
(SELECT SUM(cnumber) FROM `table_c` WHERE `table_c`.`iaid` = `table_a`.`id`),
(SELECT COUNT(cnumber) FROM `table_c` WHERE `table_c`.`a.id` = `table_a`.`id`) 
FROM `table_a`,`table_b` WHERE `table_b`.`id` = `table_a`.`b.id` 

我得到以下輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM