我有这张 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/