【问题标题】:SQL: SUM the COUNT and GROUP to Combine QueriesSQL:对 COUNT 和 GROUP 求和以组合查询
【发布时间】:2013-03-13 18:43:20
【问题描述】:

有没有一种方法是将这两个查询合并为一个查询,这样的结果是:

ChannelId   | ContentType | ContentTypeCount | SumOfAllContentTypes
  100       | link        | 59               | 179
  100       | photo       | 49               | 179
  100       | status      | 2                | 179
  100       | video       | 4                | 179
  101       | link        | 15               | 179
  101       | status      | 50               | 179

以下是我目前正在使用的查询:

SELECT
COUNT(posts.id)
FROM posts
INNER JOIN channels ON channels.id = posts.channel_id
WHERE channels.site_id = 1003
AND channels.channel_type_id = 1

结果 = 179

和..

SELECT
posts.channel_id,
posts.contenttype,
COUNT(posts.contenttype) as contenttypecount
FROM posts
INNER JOIN channels ON channels.id = posts.channel_id
WHERE channels.site_id = 1003
AND channels.channel_type_id = 1
GROUP BY posts.channel_id, posts.contenttype

结果 = 100 |链接 | 59;等等。

提前感谢您的帮助。

【问题讨论】:

  • 可能,但您为什么要这样做?两个查询都使用彼此不适用的不同条件。这就像想要一个苹果和一个橙子,并要求将它们组合成一个 orple。
  • 你可以再次JOIN posts,但是为什么你会因为你已经清楚地得到的东西而强调数据库?
  • @MarcB:我们真的应该判断OP所说的业务需求吗?
  • @PieterGeerkens:澄清(不评判)业务要求可能会使用不同的技术来满足这些要求意味着比 OP 所设想的。
  • @MarkBannister:这很好,但你可能会遇到比你想要的更强大的情况。

标签: mysql sql select count sum


【解决方案1】:

试试这个:

select A.*, B.*
from (
  SELECT
  posts.channel_id,
  posts.contenttype,
  COUNT(posts.contenttype) as contenttypecount
  FROM posts
  INNER JOIN channels ON channels.id = posts.channel_id
  WHERE channels.site_id = 1003
  AND channels.channel_type_id = 1
  GROUP BY posts.channel_id, posts.contenttype
) A
join (
  SELECT
  COUNT(posts.id) as Total
  FROM posts
  INNER JOIN channels ON channels.id = posts.channel_id
  WHERE channels.site_id = 1003
  AND channels.channel_type_id = 1
) B on 1=1

不是特别高效,但简单易行。

【讨论】:

  • 谢谢彼得。该查询有效并在 0.0027 秒内返回结果。
猜你喜欢
  • 1970-01-01
  • 2013-12-15
  • 2021-12-19
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 2015-01-22
  • 2014-04-20
  • 1970-01-01
相关资源
最近更新 更多