【问题标题】:Doing more than one COUNT on the same column in one php script SELECT query在一个 php 脚本 SELECT 查询中对同一列执行多个 COUNT
【发布时间】:2018-08-20 14:19:20
【问题描述】:

我在 mysql 数据库中有两列“Team”和“WLD”。 WLD 代表 Won、Lost、Drawn,每行包含 W、L 或 D。我想在一个 SELECT 的列中输出多少个 W、L 和 D。

如果我对其中一个执行此操作,它会起作用:

SELECT Team, COUNT(WLA) AS Won FROM ResultsTest WHERE WLA = 'W' 

但是,一旦我添加另一个 COUNT 语句,它就会开始抱怨:

SELECT Team, COUNT(WLA) AS Won 
FROM ResultsTest 
WHERE WLA = 'W', 
COUNT(WLA) AS Lost FROM ResultsTest WHERE WLA = 'L'

我哪里错了?

【问题讨论】:

  • SQL 没有这样的语法。在这种情况下,您需要使用CASE 并模拟COUNTSUM
  • 您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresqloracledb2sql-server、...

标签: sql select count


【解决方案1】:

谢谢各位。有用。节省了我很多时间:

SELECT Team, 
       COUNT(*) WLD, 
       SUM(CASE WHEN WLD = 'W' THEN 1 ELSE 0 END) AS Won, 
       SUM(CASE WHEN WLD = 'L' THEN 1 ELSE 0 END) AS Lost, 
       SUM(CASE WHEN WLD = 'D' THEN 1 ELSE 0 END) AS Drawn 
FROM ResultsTest 
GROUP BY Team 

【讨论】:

  • 这与 Tommaso 的回答有何不同?如果这解决了你的问题,你应该接受这个答案,不要重复它
【解决方案2】:

您需要一个GROUP BY 子句来完成您的数据聚合。最重要的是,如果您不想为赢和输创建两个不同的提取并加入它们,您可以在 case 中使用二进制和:

SELECT Team,
       COUNT(*) AS Matches,
       SUM(CASE WHEN WLD = 'W' THEN 1 ELSE 0 END) AS Wins,
       SUM(CASE WHEN WLD = 'L' THEN 1 ELSE 0 END) AS Losses,
       SUM(CASE WHEN WLD != 'W' AND WLD != 'L' THEN 1 ELSE 0 END) AS Draws
FROM ResultsTest
GROUP BY Team

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多