簡體   English   中英

如何獲取每行mysql查詢的計數?

[英]How to get count for each row mysql query?

我有三張桌子

1)review_trans

2)user_comment_trans

3)helpful_review_trans

表結構看起來像這樣

review_trans

 review_id(pk) |   review_desc  |  user_id 
 --------------+----------------+-----------
 1             |  hello world   |   1
 2             |  test2         |   1
 3             |  test3         |   2

user_comment_trans

 comment_id  |   review_id  |     user_id
 ------------+--------------+------------
  1          |        1     |         4
  2          |        1     |         2
  3          |        2     |         3

help_review_trans

 helpful_review_id |  review_id |  user_id
 ------------------+------------+------------
 1                 |     1      |     4 
 2                 |     1      |     2
 3                 |     2      |     3

我希望依靠每條評論獲得有用的投票和評論。 所以我想要的輸出是這樣的

輸出值

review_id       review_desc      count(helpful_review_id)      count(comment_id)
------------+------------------+----------------------------+--------------------
1           |    hello world   |           2                |           2
2           |    test2         |           1                |           1
3           |    test3         |                            |

我無法獲取此記錄。我嘗試加入表格,但僅顯示一個review_desc,請指教和幫助。

與count(distinct)一起使用左連接

select r.review_id, 
r.review_desc,
count(distinct u.comment_id),
count(distinct h.helpful_review_id)
from review_trans r
left join user_comment_trans u on(r.review_id = u.review_id)
left join helpful_review_trans h on(r.review_id = h.review_id)
group by r.review_id

演示版

SELECT rt.review_id, rt.review_desc, 
       COUNT(DISTINCT hrt.helpful_review_id), COUNT(DISTINCT uct.comment_id)
FROM review_trans rt
LEFT JOIN helpful_review_trans hrt ON rt.review_id = hrt.review_id
LEFT JOIN user_comment_trans uct ON uct.review_id = rt.review_id
GROUP BY rt.review_id
SELECT rt.review_id, rt.review_desc, helpful_count, comment_count
FROM review_trans AS rt
LEFT JOIN (
    SELECT review_id, COUNT(*) AS comment_count
    FROM user_comment_trans
    GROUP BY review_id) AS uct ON rt.review_id = uct.review_id
LEFT JOIN (
    SELECT review_id, COUNT(*) AS helpful_count
    FROM helpful_review_trans
    GROUP BY review_id) AS hrt ON rt.review_id = hrt.review_id

您可以這樣做:

SELECT
    review_trans.review_id,
    review_trans.review_desc,
    (
        SELECT
            COUNT(*)
        FROM
            helpful_review_trans
        WHERE
            helpful_review_trans.review_id=review_trans.review_id
    ) AS helpful_review_id,
    (
        SELECT
            COUNT(*)
        FROM
            user_comment_trans
        WHERE
            user_comment_trans.review_id=review_trans.review_id
    ) AS CountComment_id
FROM
    review_trans

暫無
暫無

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

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