【问题标题】:Combine MySQL SELECT COUNTs合并 MySQL SELECT COUNTs
【发布时间】:2020-09-26 18:22:56
【问题描述】:

我想将 3 个 MySQL 查询合并为 1 个

SELECT pic FROM active,
SELECT pic FROM deleted,
SELECT alt_pic FROM active where alt_pic!=''

我已经设法将前 2 个合为一个

SELECT pic FROM active UNION SELECT pic FROM deleted

我想我已经部​​分完成了所有 3 个的组合,除了我不知道在哪里插入第三个查询

SELECT COUNT(*) FROM (SELECT pic FROM active UNION SELECT pic FROM deleted)t 

我只是为了好玩而学习。如果我以某种方式违反惯例或引入了一些安全风险,请不要生气:)

编辑 1:新手不知道,感谢 Mureinik 和 Strawberry 指出 :) alt_pic 只是一个非常可选的字段,我的表 active 大约有 300+ 行但只填充了 8 个 alt_pic 字段

active
ID | name  | pic      | alt_pic
1  | Peter | pic5.jpg | alt1.jpg
2  | Mark  | pic4.jpg | NULL
3  | John  | pic3.jpg | alt2.jpg

deleted
ID | pic
1  | pic2.jpg
2  | pic1.jpg

我想要的结果是

pic_count | alt_pic_count
5         | 2

【问题讨论】:

  • 你可以 SELECT ... UNION SELECT ... UNION SELECT .... UNION SELECT ... 随心所欲
  • 帮助我们帮助您 - 请分享表结构、一些示例数据以及您希望获得的结果
  • @Mureinik 和 Strawberry 谢谢你指出这一点,我已经编辑过了 :)

标签: mysql sql count


【解决方案1】:

我将对每个表执行一个聚合查询,然后,因为它们都只返回一行,所以交叉连接它们。请注意,您不需要第三个带有alt_pic 条件的查询 - 因为count 忽略nulls,您可以将其直接应用于该列。

SELECT     pcount + dcount AS pic_count, acount AS alt_pic_count
FROM       (SELECT COUNT(pic) AS pcount, COUNT(alt_pic) AS acount
            FROM   active) a
CROSS JOIN (SELECT COUNT(*) AS dcount 
            FROM   deleted) d

【讨论】:

  • 完美!非常感谢你:))))))))))))))))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多