V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  wxf666  ›  全部回复第 9 页 / 共 27 页
回复总数  522
1 ... 5  6  7  8  9  10  11  12  13  14 ... 27  
2022-11-17 20:09:01 +08:00
回复了 qiyong 创建的主题 程序员 面试中遇到的一道 sql 题
@potatowish wangxin3 `goods_sales_record` 表应该允许多次售出某个商品吧

因为楼主 @qiyong 也用了 `FROM goods_sales_record GROUP BY goods_id`


我试了下,`goods_sales_record` 表加个 `(7, 1, '100')`,#12 #14 结果就不对了


试着拿 `SQLite` 写了下:

*( V 站排版原因,行首有全角空格,记得删除)*

```sql
WITH
  goods(id, name, group_id) AS (
   VALUES
   (1, '苹果手机', 1),
   (2, '三星手机', 1),
   (3, '联想电脑', 2),
   (4, '华为手机', 1),
   (5, '华硕电脑', 2),
   (6, 'IKBC', 3)
 ),

  goods_group(id, name) AS (
   VALUES
   (1, '手机'),
   (2, '电脑'),
   (3, '键盘')
 ),

  goods_sales_record(id, goods_id, sales_volume) AS (
   VALUES
   (1, 1, '50'),
   (2, 2, '30'),
   (3, 3, '88'),
   (4, 4, '88'),
   (5, 5, '444'),
   (6, 6, '34')
 ),

  goods_sales(goods_id, total_sales) AS (
   SELECT goods_id, SUM(sales_volume)
   FROM goods_sales_record
   GROUP BY 1
 ),

  top3 AS (
   SELECT *
   FROM goods_sales
   ORDER BY total_sales DESC
   LIMIT 3
 )

SELECT
  g1.name 商品名,
  gg.name 商品所属分组名,
  t3.total_sales 商品销量,
  SUM(gs.total_sales) 分组内所有商品总销量
FROM top3 t3
JOIN goods g1 ON g1.id = t3.goods_id
JOIN goods g2 USING(group_id)
JOIN goods_group gg ON gg.id = g1.group_id
JOIN goods_sales gs ON g2.id = gs.goods_id
GROUP BY g1.id
ORDER BY 分组内所有商品总销量 DESC, 商品销量 DESC;
```
2022-11-15 22:52:20 +08:00
回复了 diandian666 创建的主题 程序员 十年程序员难倒了一个算法上面,真的老了
@maggch97 确实,改成 round(1.15 * 100) 就能继续跑了

但跑了快半个钟了,还没出结果。。
2022-11-15 20:42:18 +08:00
回复了 kaiki 创建的主题 MySQL 求一个多条件查询,每个条件都能查询指定数量的结果的语句
@dqzcwxb 请教一下,为嘛不选用窗口函数呢?(差在哪儿?)
2022-11-15 20:38:23 +08:00
回复了 brader 创建的主题 程序员 请教个 sql 查询问题
@brader 能大致放一下当前的表结构 和 查询 SQL 吗?
2022-11-15 20:03:04 +08:00
回复了 diandian666 创建的主题 程序员 十年程序员难倒了一个算法上面,真的老了
@aijam 为嘛我改成楼主第一组数据(最长的那组),跑不出结果呢?

显示:ans = {6213: [], 2667: [], 1776: []}
2022-11-08 12:53:41 +08:00
回复了 blankmiss 创建的主题 NAS Zlib 的数据量怎么这么少,才 31T 的书籍?
@blankmiss 我不是说 31T 多 /少,是说 sql 少,才 1200W 数据,其中有 13W 中文书籍

但看到 @kernelpanic 在 #93 楼说下了 2000W 本,其中 20W 本是中文

是不是少了 800W ?
2022-11-08 12:48:20 +08:00
回复了 maichaide 创建的主题 Linux 远离国产软件,只配在虚拟机和沙箱里跑!
楼上的建议远离 Chrome 吗?

这货时不时有个 software_reporter_tool 扫硬盘也很吃资源,风扇呼呼响,而且没有提供选项关掉
2022-11-08 05:01:46 +08:00
回复了 blankmiss 创建的主题 NAS Zlib 的数据量怎么这么少,才 31T 的书籍?
@kernelpanic 我只下了 sql 文件

统计了下,总共不到 1200W 行数据,中文才 13 万本左右

是不是数据库缺失很多啊?@blankmiss ,有啥办法补全吗?
2022-11-07 11:44:21 +08:00
回复了 Jobing 创建的主题 程序员 当你解析 JSON 时, Number 类型双精度丢失可以尝试使用 json-bn
@bertonzh `JSON.parse` 还能这样用?学习了!

但耗时更久了,2.8 s 左右

会不会是有了转换器,就用不了内部高度优化的 `json` 解析器了。。
2022-11-07 01:21:17 +08:00
回复了 Jobing 创建的主题 程序员 当你解析 JSON 时, Number 类型双精度丢失可以尝试使用 json-bn
@bertonzh 试着写出来了:

*( V 站排版原因,行首有全角空格)*

```javascript
function parseJson(json) {

  function restore(obj) {
   if (typeof obj === 'number')
    return nums[obj];
   else if (Array.isArray(obj))
    obj.forEach((v, i) => obj[i] = restore(v));
   else if (typeof obj === 'object' && obj !== null)
    Object.keys(obj).forEach(k => obj[k] = restore(obj[k]));
   return obj;
 }

  let nums = [];
  return restore(JSON.parse(json.replace(/"(?:\\?.)*?"|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g, m =>
   m[0] === '"' ? m : nums.push(/[.eE]/.test(m) || Number.isSafeInteger(+m) ? +m : BigInt(m)) - 1
 )));
}
```

拿了个本地 64.8 MB 的 `~/.conda/pkgs/cache/e5e4a514.json` 测了下速度: *( i5-8250U ,`nodejs` v16 )*

- #5 楼的方法:3.3 s
- 此楼方法:2.2 s = 正则替换 1.5 s + json 解析 0.4 s + 递归替换 0.3 s
- `json-bigint` *(`{useNativeBigInt: true}`)*:1.7 s
2022-11-06 16:53:55 +08:00
回复了 Jobing 创建的主题 程序员 当你解析 JSON 时, Number 类型双精度丢失可以尝试使用 json-bn
@bertonzh 写漏了:

`/^(?:字符串|整数|浮点|true|false|null|[[\]{},]|\s+)*$/`
2022-11-06 16:52:23 +08:00
回复了 Jobing 创建的主题 程序员 当你解析 JSON 时, Number 类型双精度丢失可以尝试使用 json-bn
@bertonzh 回头再看看,其实应该还没处理好有浮点数的 `json`。但思路是一样的,碰到字符串、浮点数,跳过就好。


如果担心 `eval` 了危险的 `js`,我觉得可以正则匹配下,看是不是全为 `json` 的元素:

`/^(?:字符串|整数|浮点|true|false|null|[[\]{},]|\s+)$/`


其实,我感觉可以:

1. 正则匹配出,并用一个数组记录下所有整数,再替换为在数组中的下标。
2. `JSON.parse()` 后,再遍历所有为整数的值,替换回来(这时候就可以决定用不用 `bigint` 了)

好处:

1. 这应该会比手动解析 `json` 快
2. 而且代码体积小(可能十来行就可以了)
3. 不用担心 `eval`、`new Function` 能不能用,危不危险的问题
2022-11-06 04:04:48 +08:00
回复了 Jobing 创建的主题 程序员 当你解析 JSON 时, Number 类型双精度丢失可以尝试使用 json-bn
@bertonzh `js` 新手。感觉通过正则找到数字,并替换为 `bigint`,最后再 `eval` 或 `new Function`,也能读取含有大数字的 `json` 诶:

```javascript
s = '{"x": ": 12345678901234561111", "y": [-12345678901234561111, "12345678901234561111", -123456, "\\"12345678901234561111\\""]}';

eval('(' + s.replace(/"(?:\\?.)*?"|-?\d+/g, m => !isFinite(m) || Number.isSafeInteger(+m) ? m : m + 'n') + ')');
```

结果:

```javascript
{
  x: ": 12345678901234561111",
  y: [
  -12345678901234561111n,
  "12345678901234561111",
  -123456,
  "\"12345678901234561111\""
 ]
}
```
2022-11-06 00:48:21 +08:00
回复了 Tecson 创建的主题 Android Android 手机外接键盘,去哪里能找到支持的快捷键列表?
这有啥应用场景吗。。随时随地 code ?还是。。?
@totoro52 数据库新手请教一下,如果是用 `MySQL` 实现的话,这个 `字段数据表` 结构是咋样的呢?

`( ID PRIMARY KEY ,所属记录 ID ,字段 ID ,数据 TEXT ,INDEX (所属记录 ID ,字段 ID ))` 这样?

检索,用全文索引?

排序。。是啥。。


> 比如 A 模块有个联系人,B 模块在选 A 模块列表数据时,需要把 B 模块的联系人自动填写进去

(可能没理解透功能)直接 JOIN 能解决吗?
@nowheremanx 会不会『希望用户能老老实实填写正确的 `toml`』有点不现实?

比如,会不会出现:

- 不小心删掉了一点 `{indicator}`,导致你没法定位
- 写成了中文符号 *(`tags = [“程序员”,“大牛”] `)*
- 没正确转义字符串 *(`path = "C:\users\toml\Desktop\new\使用"的注意事项.docx"`)*
- 输错键名 *(`tag = ...`)*
- ……
@renmu MySQL 好像可以给 json 字段做索引吧?连数组也能做索引( multi-valued Indexes )
奇怪,不能动态构造有 firstName, lastName, education, tag, travel, …… 等字段的表单,给用户填写吗?

用户提交后,后端再转成 json ,写进数据库。。

好像不难啊?
2022-11-04 20:41:26 +08:00
回复了 deweixu 创建的主题 程序员 想问问大家 ROI 报表怎么实现的?
@Features 所以,一招『自增 /uuid/……主键 + 业务字段加索引』吃天下,应该是没问题的?

#4 楼的 `SQL` 代码,改成自增主键 + `(date, reg_date, uid, amount)` 覆盖索引,应该也能很快


但,如果表结构有几个 `text` 字段(反正导致没法添加到覆盖索引里,一定要回表),会为了速度 /性能,牺牲这个原则,改为 `(date, reg_date, uid)` 主键吗?(按 4 楼例子说,可享受 30 次 `range` 级速度)

还是继续坚持原则,各种分库分表分布式大数据一通上?( 2.6 亿次 `eq_ref` 级速度)
2022-11-04 01:28:30 +08:00
回复了 deweixu 创建的主题 程序员 想问问大家 ROI 报表怎么实现的?
@Features 可我看一些帖子(比如 [这个帖子]( /t/654133 )),不用自增 /uuid/……,而用业务主键,简直是要被铺天盖地的教训和嘲讽淹没。。比如:

1. 工作中被同事打
2. 大学生毕业设计
3. 小学生设计
4. 没有经验胡乱设计
5. B+ 树随机插入,导致页分裂严重,导致性能很低
6. 阿里巴巴《 Java 开发手册》[强制]规定……
7. 合并表时用 uuid 很轻松

我很怀疑第 5 条:虽然聚集表是能顺序插入了,但索引也要随机插入,也会导致页分裂呀?而且总体工作量不是更大了(还要额外维护一个自增主键 /uuid/……)?

比较认同的是第 7 条
1 ... 5  6  7  8  9  10  11  12  13  14 ... 27  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5697 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 08:34 · PVG 16:34 · LAX 01:34 · JFK 04:34
Developed with CodeLauncher
♥ Do have faith in what you're doing.