php - 如何显示所有记录分组依据

标签 php mysql

我有这张 table 。

id | promoid | fecha       | Tarifa
--------------------------------------
1  |    1    | 2016-10-01  |  74.38
2  |    1    | 2016-10-02  |  74.38
3  |    2    | 2016-10-01  | 111.57
4  |    2    | 2016-10-02  | 111.57

我想按日期之间的promoid 分组并显示所有记录。我尝试使用 group by 但我只获得了一条记录(第一条)。

这是我的 SQL

SELECT * 
  FROM promociones
 WHERE fecha >= '2016-10-01' 
   AND fecha < '2016-10-03' 
 GROUP  
    BY promoid

当 sql 运行时,它仅显示按 promoid 分组的第一行。像这样。

id | promoid | fecha       | Tarifa
-------------------------------------- 
1  |    1    | 2016-10-01  |  74.38

3  |    2    | 2016-10-01  | 111.57

表格很长,但我想获取promoid 生成的所有行。像这样。

id | promoid | fecha       | Tarifa
--------------------------------------
1  |    1    | 2016-10-01  |  74.38
2  |    1    | 2016-10-02  |  74.38
3  |    2    | 2016-10-01  | 111.57
4  |    2    | 2016-10-02  | 111.57

最佳答案

“通常”...

按查询分组 “allways” 意味着两件事:

  • 结果集的记录少于没有 group by 的等效对应查询
  • Select 的表达式列表(输出中显示的内容)包括任何分组函数(sum()count()max()) 与 group by 生成的每个组相关且有意义。

特别针对您的问题:您期望“所有”记录(相同数量)并且您没有或期望或提议任何相关的分组功能。正如评论中所说,似乎可以通过 select * from ... 解决,或者您需要解释或更好地思考您想要什么。

所以给出:
按 expr1、expr2 选择 expr1、expr2、expr3、expr4

请将group by想象成一个过程,它接收一些输入数据并按照以下规则给出一些输出数据:

  • 对于输入数据中存在的 expr1、expr2 的每种不同组合,输出将只有一条记录。 (这就是您的示例显示两条记录的原因)
  • expr3、expr4必须是(或包含)分组函数,输出“那组”相关数据。
    关于 MySql 的一个词:在 MySql 语法上,如果你省略了 expr3 和 expr4 上的任何分组函数,你可以假设它使用 whatever() 作为分组函数,这样: whatever( expr3), whatever(expr4) 并且它从“那个组”中输出任何值(这就是为什么你可以在你的例子中使用 * 并且你有显示的输出)

关于php - 如何显示所有记录分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39175659/

相关文章:

mysql - 转换器应用程序拒绝 MS Access 2010 accdb 文件

python - 在 Ansible 任务中运行 bash 命令

php - 是否可以在不安装应用程序的情况下更新用户的 Facebook 状态?

javascript - 从 javascript 接收字符串时 phpexplode() 不起作用

javascript - 如何在停用 WordPress 插件时调用 Java 脚本

php - php mysql_fetch_array 是否适用于 html 输入框?

MySQL按时间分组

MySQL 查找并替换位于 YYY 和 ZZZ 之间的 XXX

php图片上传安全防范黑客攻击

php - 使用 preg_match PHP 从字符串中查找失败的行