【问题标题】:Selecting SUM+COUNT from one table and COUNT from another in Single query在单个查询中从一个表中选择 SUM+COUNT 并从另一个表中选择 COUNT
【发布时间】:2013-12-16 22:36:56
【问题描述】:

我想从users 表中获取年龄总和和活跃用户总数,以及从pictures 表中获取 png 图片的总数。我尝试了以下方法,但它给了我错误。我怎样才能在单个查询中做到这一点?我正在使用 PDO

SELECT
(SELECT SUM(age) AS age_sum,COUNT(*) AS total FROM users where type='active'),
(SELECT COUNT(*) AS pictotal FROM pictures where extension='png')

错误 -> 操作数应包含 1 列

【问题讨论】:

  • 您返回的错误是什么?
  • @BWS 错误-> 操作数应包含 1 列
  • 每个选择是否都会自行返回正确的响应?
  • @BWS 单独它们工作正常,当我运行包含 SUM 和 COUNT 的第二行时它工作正常,但是当我将三个放在 select 中时它显示错误

标签: php mysql sql


【解决方案1】:

选择
AA.age_sum,AA。总计,BB.pictotal
来自
(SELECT SUM(age) AS age_sum,COUNT(*) AS total FROM users where type='active') AA,
(SELECT COUNT(*) AS pictotal FROM pictures where extension='png') BB

【讨论】:

    【解决方案2】:

    对于您的任务是一个子选择更好的决定 - 像这样

    SELECT SUM(age) AS age_sum,COUNT(*) AS total, (SELECT COUNT(*) FROM pictures where extension='png') AS pictotal FROM users where type='active')
    

    当每个查询返回的列数不相等时,您就无法在一个查询中“合并”两个不同的查询。

    【讨论】:

      【解决方案3】:

      你做到了 此选择是您的问题返回 2 列
      (SELECT SUM(age) AS age_sum,COUNT(*) AS total

       SELECT SUM(age) AS age_sum,COUNT(*) AS total, 
       (SELECT COUNT(*) FROM pictures where extension='png') AS pictotal
       FROM users where type='active' 
      

      【讨论】:

        【解决方案4】:

        你可以试试这样的:

        SELECT 'AGE_SUM',SUM(age) FROM users where type='active'
        UNION
        SELECT 'TOTAL',COUNT(*) FROM users where type='active'
        UNION
        SELECT 'PIC_TOTAL',COUNT(*) FROM pictures where extension='png'
        

        【讨论】:

        • 我赞成您的回答,因为使用 UNION 会执行其他查询 - 仅当主表包含数据时才使用子选择
        • 为什么要运行两次 SUM 和 COUNT ?SELECT 'AGE_SUM',SUM(age) FROM users where type='active' UNION SELECT 'TOTAL',COUNT(*) FROM users where type='active' UNION SELECT 'TOTAL',COUNT(*) FROM users where type='活动'
        • @ins0 主表包含数据意味着什么?
        • 使用子查询方法 - 只有当表 users 包含类型为 active 的用户时才会执行子查询 - 如果没有返回任何内容
        • @BWS 我使用了您的查询,它显示总和为零,TOTAL 和 PIC_TOTAL 显示为未定义索引
        猜你喜欢
        • 1970-01-01
        • 2021-11-14
        • 2010-10-11
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多